]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/cnid/dbd/cnid_dbd.c
Merge branch-2-1
[netatalk.git] / libatalk / cnid / dbd / cnid_dbd.c
index 20512de4cdfc300607258d9af019fcc91dc70a18..c98adafcd152f872d24904bf0a69c97112afb9e0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: cnid_dbd.c,v 1.15 2009-11-30 15:27:48 didg Exp $
+ * $Id: cnid_dbd.c,v 1.17 2010/03/31 09:47:32 franklahm Exp $
  *
  * Copyright (C) Joerg Lenneis 2003
  * All Rights Reserved.  See COPYING.
@@ -52,10 +52,7 @@ static void RQST_RESET(struct cnid_dbd_rqst  *r)
 }
 
 /* ----------- */
-extern char *Cnid_srv;
-extern char *Cnid_port;
-
-#define MAX_DELAY 40
+#define MAX_DELAY 10
 
 /* *MUST* be < afp tickle or it's never triggered (got EINTR first) */
 #define SOCK_DELAY 11
@@ -84,20 +81,20 @@ static int tsock_getfd(const char *host, const char *port)
     hints.ai_flags = AI_NUMERICSERV;
 
     if ((err = getaddrinfo(host, port, &hints, &servinfo)) != 0) {
-        LOG(log_error, logtype_default, "tsock_getfd: getaddrinfo: %s:%s : %s\n", host, port, gai_strerror(err));
+        LOG(log_error, logtype_default, "tsock_getfd: getaddrinfo: CNID server %s:%s : %s\n", host, port, gai_strerror(err));
         return -1;
     }
 
     /* loop through all the results and bind to the first we can */
     for (p = servinfo; p != NULL; p = p->ai_next) {
         if ((sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) {
-            LOG(log_info, logtype_default, "tsock_getfd: socket %s:: %s", host, strerror(errno));
+            LOG(log_info, logtype_default, "tsock_getfd: socket CNID server %s:: %s", host, strerror(errno));
                 continue;
         }
 
         attr = 1;
         if (setsockopt(sock, SOL_TCP, TCP_NODELAY, &attr, sizeof(attr)) == -1) {
-            LOG(log_error, logtype_cnid, "getfd: set TCP_NODELAY %s: %s", host, strerror(errno));
+            LOG(log_error, logtype_cnid, "getfd: set TCP_NODELAY CNID server %s: %s", host, strerror(errno));
             close(sock);
             continue;
         }
@@ -105,7 +102,7 @@ static int tsock_getfd(const char *host, const char *port)
         tv.tv_sec = SOCK_DELAY;
         tv.tv_usec = 0;
         if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0) {
-            LOG(log_error, logtype_cnid, "getfd: set SO_RCVTIMEO %s: %s", host, strerror(errno));
+            LOG(log_error, logtype_cnid, "getfd: set SO_RCVTIMEO CNID server %s: %s", host, strerror(errno));
             close(sock);
             continue;
         }
@@ -113,7 +110,7 @@ static int tsock_getfd(const char *host, const char *port)
         tv.tv_sec = SOCK_DELAY;
         tv.tv_usec = 0;
         if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv)) < 0) {
-            LOG(log_error, logtype_cnid, "getfd: set SO_SNDTIMEO %s: %s", host, strerror(errno));
+            LOG(log_error, logtype_cnid, "getfd: set SO_SNDTIMEO CNID server %s: %s", host, strerror(errno));
             close(sock);
             continue;
         }
@@ -122,7 +119,7 @@ static int tsock_getfd(const char *host, const char *port)
             err = errno;
             close(sock);
             sock=-1;
-            LOG(log_error, logtype_cnid, "getfd: connect %s: %s", host, strerror(err));
+            LOG(log_error, logtype_cnid, "getfd: connect CNID server %s: %s", host, strerror(err));
             continue;
         }
         
@@ -133,7 +130,7 @@ static int tsock_getfd(const char *host, const char *port)
     freeaddrinfo(servinfo);
 
     if (p == NULL) {
-        LOG(log_error, logtype_cnid, "tsock_getfd: no suitable network config from %s:%s", host, port);
+        LOG(log_error, logtype_cnid, "tsock_getfd: no suitable network config from CNID server %s:%s", host, port);
         return -1;
     }
 
@@ -146,8 +143,6 @@ static int write_vec(int fd, struct iovec *iov, size_t towrite)
     ssize_t len;
     size_t len1;
 
-    LOG(log_maxdebug, logtype_cnid, "write_vec: request to write %d bytes", towrite);
-
     len1 =  iov[1].iov_len;
     while (towrite > 0) {
         if (((len = writev(fd, iov, 2)) == -1 && errno == EINTR) || !len)
@@ -185,9 +180,10 @@ static int init_tsock(CNID_private *db)
     int len;
     struct iovec iov[2];
 
-    LOG(log_debug, logtype_cnid, "init_tsock: BEGIN. Opening volume '%s', CNID Server: %s/%s", db->db_dir, Cnid_srv, Cnid_port);
+    LOG(log_debug, logtype_cnid, "init_tsock: BEGIN. Opening volume '%s', CNID Server: %s/%s", 
+        db->db_dir, db->cnidserver, db->cnidport);
 
-    if ((fd = tsock_getfd(Cnid_srv, Cnid_port)) < 0)
+    if ((fd = tsock_getfd(db->cnidserver, db->cnidport)) < 0)
         return -1;
 
     len = strlen(db->db_dir);
@@ -215,8 +211,6 @@ static int send_packet(CNID_private *db, struct cnid_dbd_rqst *rqst)
     struct iovec iov[2];
     size_t towrite;
 
-    LOG(log_maxdebug, logtype_cnid, "send_packet: BEGIN");
-
     if (!rqst->namelen) {
         if (write(db->fd, rqst, sizeof(struct cnid_dbd_rqst)) != sizeof(struct cnid_dbd_rqst)) {
             LOG(log_warning, logtype_cnid, "send_packet: Error/short write rqst (db_dir %s): %s",
@@ -241,7 +235,7 @@ static int send_packet(CNID_private *db, struct cnid_dbd_rqst *rqst)
         return -1;
     }
     
-    LOG(log_maxdebug, logtype_cnid, "send_packet: OK");
+    LOG(log_maxdebug, logtype_cnid, "send_packet: {done}");
     return 0;
 }
 
@@ -301,8 +295,6 @@ static int dbd_rpc(CNID_private *db, struct cnid_dbd_rqst *rqst, struct cnid_dbd
     char *nametmp;
     size_t len;
 
-    LOG(log_maxdebug, logtype_cnid, "dbd_rpc: BEGIN");
-
     if (send_packet(db, rqst) < 0) {
         return -1;
     }
@@ -330,7 +322,7 @@ static int dbd_rpc(CNID_private *db, struct cnid_dbd_rqst *rqst, struct cnid_dbd
         return -1;
     }
 
-    LOG(log_maxdebug, logtype_cnid, "dbd_rpc: END");
+    LOG(log_maxdebug, logtype_cnid, "dbd_rpc: {done}");
 
     return 0;
 }
@@ -341,8 +333,6 @@ 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 */
 
-    LOG(log_debug7, logtype_cnid, "transmit: BEGIN");
-
     if (db->changed) {
         /* volume and db don't have the same timestamp
          */
@@ -354,7 +344,7 @@ static int transmit(CNID_private *db, struct cnid_dbd_rqst *rqst, struct cnid_db
             struct cnid_dbd_rply rply_stamp;
             char  stamp[ADEDLEN_PRIVSYN];
 
-            LOG(log_debug, logtype_cnid, "transmit: connecting to cnid_dbd ...");
+            LOG(log_maxdebug, logtype_cnid, "transmit: connecting to cnid_dbd ...");
             if ((db->fd = init_tsock(db)) < 0) {
                 goto transmit_fail;
             }
@@ -383,11 +373,11 @@ static int transmit(CNID_private *db, struct cnid_dbd_rqst *rqst, struct cnid_db
                     memcpy(db->client_stamp, stamp, ADEDLEN_PRIVSYN);
                 memcpy(db->stamp, stamp, ADEDLEN_PRIVSYN);
             }
-            LOG(log_debug, logtype_cnid, "transmit: succesfully attached to cnid_dbd for volume '%s' with stamp '%08lx'.", 
+            LOG(log_debug, logtype_cnid, "transmit: attached to '%s', stamp: '%08lx'.", 
                 db->db_dir, *(uint64_t *)stamp);
         }
         if (!dbd_rpc(db, rqst, rply)) {
-            LOG(log_debug7, logtype_cnid, "transmit: END OK");
+            LOG(log_maxdebug, logtype_cnid, "transmit: {done}");
             return 0;
         }
     transmit_fail:
@@ -403,7 +393,7 @@ static int transmit(CNID_private *db, struct cnid_dbd_rqst *rqst, struct cnid_db
                 return -1;
             }
             /* sleep a little before retry */
-            delay(5);
+            delay(2);
         } else {
             clean = 0; /* false... next time sleep */
             time(&orig);
@@ -442,16 +432,16 @@ static struct _cnid_db *cnid_dbd_new(const char *volpath)
 }
 
 /* ---------------------- */
-struct _cnid_db *cnid_dbd_open(const char *dir, mode_t mask _U_, u_int32_t flags _U_)
+struct _cnid_db *cnid_dbd_open(struct cnid_open_args *args)
 {
     CNID_private *db = NULL;
     struct _cnid_db *cdb = NULL;
 
-    if (!dir) {
+    if (!args->dir) {
         return NULL;
     }
 
-    if ((cdb = cnid_dbd_new(dir)) == NULL) {
+    if ((cdb = cnid_dbd_new(args->dir)) == NULL) {
         LOG(log_error, logtype_cnid, "cnid_open: Unable to allocate memory for database");
         return NULL;
     }
@@ -465,9 +455,11 @@ struct _cnid_db *cnid_dbd_open(const char *dir, mode_t mask _U_, u_int32_t flags
 
     /* We keep a copy of the directory in the db structure so that we can
        transparently reconnect later. */
-    strcpy(db->db_dir, dir);
+    strcpy(db->db_dir, args->dir);
     db->magic = CNID_DB_MAGIC;
     db->fd = -1;
+    db->cnidserver = strdup(args->cnidserver);
+    db->cnidport = strdup(args->cnidport);
 
     LOG(log_debug, logtype_cnid, "cnid_dbd_open: Finished initializing cnid dbd module for volume '%s'", db->db_dir);
 
@@ -497,7 +489,7 @@ void cnid_dbd_close(struct _cnid_db *cdb)
     }
 
     if ((db = cdb->_private) != NULL) {
-        LOG(log_info, logtype_cnid, "closing database connection for volume '%s'", db->db_dir);
+        LOG(log_debug, logtype_cnid, "closing database connection for volume '%s'", db->db_dir);
 
         if (db->fd >= 0)
             close(db->fd);