From 05d03f931fa62e19fd989f6e952f86762aa172e6 Mon Sep 17 00:00:00 2001 From: zacheiss Date: Tue, 20 Sep 2005 22:03:18 +0000 Subject: [PATCH] Deal with entries in the nfsphys table having allocations bigger than will fit in an unsigned int. Don't call cleanup() if we're running as MODE_NO. --- dbck/dbck.h | 4 ++-- dbck/dbck.pc | 3 ++- dbck/phase1.pc | 7 ++++--- dbck/phase4.pc | 9 ++++++--- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/dbck/dbck.h b/dbck/dbck.h index a7ac2e01..6888e3bb 100644 --- a/dbck/dbck.h +++ b/dbck/dbck.h @@ -99,9 +99,9 @@ struct nfsphys { char dir[NFSPHYS_DIR_SIZE]; int mach_id; int nfsphys_id; - int allocated; + unsigned long long allocated; int modby; - int count; + unsigned long long count; }; struct printserver { diff --git a/dbck/dbck.pc b/dbck/dbck.pc index 10e44e93..9bcabd7d 100644 --- a/dbck/dbck.pc +++ b/dbck/dbck.pc @@ -130,7 +130,8 @@ int main(int argc, char **argv) phase4(); EXEC SQL COMMIT WORK; - cleanup(); + if (mode != MODE_NO) + cleanup(); printf("Done.\n"); exit(0); } diff --git a/dbck/phase1.pc b/dbck/phase1.pc index e49fbcf1..0b35abbd 100644 --- a/dbck/phase1.pc +++ b/dbck/phase1.pc @@ -849,13 +849,14 @@ void phase1(void) out_of_mem("loading nfsphs"); EXEC SQL DECLARE csr111 CURSOR FOR - SELECT nfsphys_id, dir, mach_id, allocated, modby FROM nfsphys; + SELECT nfsphys_id, dir, mach_id, TO_CHAR(allocated), modby FROM nfsphys; EXEC SQL OPEN csr111; while (1) { EXEC SQL BEGIN DECLARE SECTION; - int nfsphys_id, mach_id, allocated, modby; + int nfsphys_id, mach_id, modby; char dir[NFSPHYS_DIR_SIZE]; + char allocated[39]; EXEC SQL END DECLARE SECTION; EXEC SQL FETCH csr111 INTO :nfsphys_id, :dir, :mach_id, @@ -869,7 +870,7 @@ void phase1(void) strcpy(n->dir, strtrim(dir)); n->mach_id = mach_id; n->nfsphys_id = nfsphys_id; - n->allocated = allocated; + n->allocated = strtoull(allocated, NULL, 0); n->modby = modby; n->count = 0; retval = hash_store(nfsphys, nfsphys_id, n); diff --git a/dbck/phase4.pc b/dbck/phase4.pc index 052f5c28..eb8f3d21 100644 --- a/dbck/phase4.pc +++ b/dbck/phase4.pc @@ -77,18 +77,21 @@ void check_nfs_counts(int id, void *nfsphys, void *hint) { struct nfsphys *n = nfsphys; EXEC SQL BEGIN DECLARE SECTION; - int iid = id, val, rowcount; + int iid = id, rowcount; + unsigned long long val; + char valstr[40] = {0}, *endptr = valstr+39; EXEC SQL END DECLARE SECTION; val = n->count; if (n->allocated != val) { - printf("Count wrong on NFSphys %s:%s; is %d in db, counted %d\n", + printf("Count wrong on NFSphys %s:%s; is %lld in db, counted %lld\n", ((struct machine *) hash_lookup(machines, n->mach_id))->name, n->dir, n->allocated, val); if (single_fix("Update", 1)) { - EXEC SQL UPDATE nfsphys SET allocated = :val + strcpy(valstr, ulltostr(val, endptr)); + EXEC SQL UPDATE nfsphys SET allocated = TO_NUMBER(:valstr) WHERE nfsphys_id = :iid; rowcount = sqlca.sqlerrd[2]; if (rowcount > 0) -- 2.45.1