]> arthur.barton.de Git - netatalk.git/commitdiff
Get the db stamp in cnid_get_stamp()
authorRalph Boehme <sloowfranklin@gmail.com>
Tue, 11 Dec 2012 09:39:38 +0000 (10:39 +0100)
committerRalph Boehme <sloowfranklin@gmail.com>
Mon, 17 Dec 2012 18:05:06 +0000 (19:05 +0100)
Previously we actually intersected the IPC call to get the db
stamp in transmit() when the firt actual CNID IPC function is
executed.

Drop the check for changed db stamps.

Add a simple function for the get stamp IPC stuff.

etc/cnid_dbd/cmd_dbd_scanvol.c
libatalk/cnid/dbd/cnid_dbd.c

index 68300b6c464f3cac00eb5826740a5de4acfc69ae..19b3ebc6b559c1374528bb1b4d5eca30abade00a 100644 (file)
@@ -911,18 +911,6 @@ int cmd_dbd_scanvol(struct vol *vol_in, dbd_flags_t flags)
      * then cnid_resolve() actually gets the value from the db
      */
     cnid_getstamp(vol->v_cdb, stamp, sizeof(stamp));
-    cnid_t rootid = 0;
-    if (cnid_resolve(vol->v_cdb, &rootid, cnidResBuf, sizeof(cnidResBuf)) == NULL) {
-        dbd_log(LOGSTD, "error resolving rootinfo key");
-        goto exit;
-    }
-
-#if 0
-    if (0 != (dbif_copy_rootinfokey(dbd, dbd_rebuild))) {
-        ret = -1;
-        goto exit;
-    }
-#endif
 
     if (setjmp(jmp) != 0) {
         ret = 0;                /* Got signal, jump from dbd_readdir */
index b654740a5df56d2fcd8082ba9ba361a5d98edd99..d0d5ae67bdfcf28c2a436cc214a196e5792f52d8 100644 (file)
@@ -356,47 +356,18 @@ static int transmit(CNID_private *db, struct cnid_dbd_rqst *rqst, struct cnid_db
     time_t orig, t;
     int clean = 1; /* no errors so far - to prevent sleep on first try */
 
-    if (db->changed) {
-        /* volume and db don't have the same timestamp
-         */
-        return -1;
-    }
     while (1) {
         if (db->fd == -1) {
-            struct cnid_dbd_rqst rqst_stamp;
-            struct cnid_dbd_rply rply_stamp;
-            char  stamp[ADEDLEN_PRIVSYN];
-
             LOG(log_maxdebug, logtype_cnid, "transmit: connecting to cnid_dbd ...");
             if ((db->fd = init_tsock(db)) < 0) {
                 goto transmit_fail;
             }
-            dbd_initstamp(&rqst_stamp);
-            memset(stamp, 0, ADEDLEN_PRIVSYN);
-            rply_stamp.name = stamp;
-            rply_stamp.namelen = ADEDLEN_PRIVSYN;
-
-            if (dbd_rpc(db, &rqst_stamp, &rply_stamp) < 0)
-                goto transmit_fail;
-            if (dbd_reply_stamp(&rply_stamp ) < 0)
-                goto transmit_fail;
-
             if (db->notfirst) {
-                LOG(log_debug7, logtype_cnid, "transmit: reconnected to cnid_dbd, comparing database stamps...");
-                if (memcmp(stamp, db->stamp, ADEDLEN_PRIVSYN)) {
-                    LOG(log_error, logtype_cnid, "transmit: ... not the same db!");
-                    db->changed = 1;
-                    return -1;
-                }
-                LOG(log_debug7, logtype_cnid, "transmit: ... OK.");
+                LOG(log_debug7, logtype_cnid, "transmit: reconnected to cnid_dbd");
             } else { /* db->notfirst == 0 */
                 db->notfirst = 1;
-                if (db->client_stamp)
-                    memcpy(db->client_stamp, stamp, ADEDLEN_PRIVSYN);
-                memcpy(db->stamp, stamp, ADEDLEN_PRIVSYN);
             }
-            LOG(log_debug, logtype_cnid, "transmit: attached to '%s', stamp: '%08lx'.",
-                db->db_dir, *(uint64_t *)stamp);
+            LOG(log_debug, logtype_cnid, "transmit: attached to '%s'", db->db_dir);
         }
         if (!dbd_rpc(db, rqst, rply)) {
             LOG(log_maxdebug, logtype_cnid, "transmit: {done}");
@@ -531,6 +502,32 @@ void cnid_dbd_close(struct _cnid_db *cdb)
     return;
 }
 
+/**
+ * Get the db stamp
+ **/
+static int cnid_dbd_stamp(CNID_private *db)
+{
+    struct cnid_dbd_rqst rqst_stamp;
+    struct cnid_dbd_rply rply_stamp;
+    char  stamp[ADEDLEN_PRIVSYN];
+
+    dbd_initstamp(&rqst_stamp);
+    memset(stamp, 0, ADEDLEN_PRIVSYN);
+    rply_stamp.name = stamp;
+    rply_stamp.namelen = ADEDLEN_PRIVSYN;
+
+    if (transmit(db, &rqst_stamp, &rply_stamp) < 0)
+        return -1;
+    if (dbd_reply_stamp(&rply_stamp ) < 0)
+        return -1;
+
+    if (db->client_stamp)
+        memcpy(db->client_stamp, stamp, ADEDLEN_PRIVSYN);
+    memcpy(db->stamp, stamp, ADEDLEN_PRIVSYN);
+
+    return 0;
+}
+
 /* ---------------------- */
 cnid_t cnid_dbd_add(struct _cnid_db *cdb, const struct stat *st,
                     cnid_t did, const char *name, size_t len, cnid_t hint)
@@ -706,7 +703,9 @@ char *cnid_dbd_resolve(struct _cnid_db *cdb, cnid_t *id, void *buffer, size_t le
     return name;
 }
 
-/* ---------------------- */
+/**
+ * Caller passes buffer where we will store the db stamp
+ **/
 int cnid_dbd_getstamp(struct _cnid_db *cdb, void *buffer, const size_t len)
 {
     CNID_private *db;
@@ -718,8 +717,8 @@ int cnid_dbd_getstamp(struct _cnid_db *cdb, void *buffer, const size_t len)
     }
     db->client_stamp = buffer;
     db->stamp_size = len;
-    memset(buffer,0, len);
-    return 0;
+
+    return cnid_dbd_stamp(db);
 }
 
 /* ---------------------- */
@@ -1024,25 +1023,7 @@ int cnid_dbd_wipe(struct _cnid_db *cdb)
     }
     LOG(log_debug, logtype_cnid, "cnid_dbd_wipe: ok");
 
-    struct cnid_dbd_rqst rqst_stamp;
-    struct cnid_dbd_rply rply_stamp;
-    char  stamp[ADEDLEN_PRIVSYN];
-
-    dbd_initstamp(&rqst_stamp);
-    memset(stamp, 0, ADEDLEN_PRIVSYN);
-    rply_stamp.name = stamp;
-    rply_stamp.namelen = ADEDLEN_PRIVSYN;
-
-    if (dbd_rpc(db, &rqst_stamp, &rply_stamp) < 0)
-        return -1;
-    if (dbd_reply_stamp(&rply_stamp ) < 0)
-        return -1;
-
-    if (db->client_stamp)
-        memcpy(db->client_stamp, stamp, ADEDLEN_PRIVSYN);
-    memcpy(db->stamp, stamp, ADEDLEN_PRIVSYN);
-
-    return 0;
+    return cnid_dbd_stamp(db);
 }