* If server is zero, will match first index of ANY server and partition
* Zero is a valid partition field.
*/
-int
-FindIndex(struct nvldbentry *entry, afs_uint32 server, afs_int32 part, afs_int32 type)
+static int
+FindIndex(struct uvldbentry *entry, afs_uint32 server, afs_int32 part, afs_int32 type)
{
int e;
afs_int32 error = 0;
if (!type || (entry->serverFlags[e] & type)) {
if ((!server || (entry->serverPartition[e] == part))
&& (!server
- || VLDB_IsSameAddrs(entry->serverNumber[e], server,
+ || VLDB_IsSameAddrs(entry->serverUnique[e], server,
&error)))
break;
if (type == ITSRWVOL)
if (error) {
fprintf(STDERR,
"Failed to get info about server's %d address(es) from vlserver (err=%d)\n",
- entry->serverNumber[e], error);
+ entry->serverUnique[e], error);
return -1;
}
}
/* Changes the rw site only */
-void
-SetAValue(struct nvldbentry *entry, afs_uint32 oserver, afs_int32 opart,
+static void
+SetAValue(struct uvldbentry *entry, afs_uint32 oserver, afs_int32 opart,
afs_uint32 nserver, afs_int32 npart, afs_int32 type)
{
int e;
if (e == -1)
return; /* If didn't find it, just return */
- entry->serverNumber[e] = nserver;
+ entry->serverUnique[e] = nserver;
entry->serverPartition[e] = npart;
/* Now move rest of entries up */
if ((nserver == 0L) && (npart == 0L)) {
for (e++; e < entry->nServers; e++) {
- entry->serverNumber[e - 1] = entry->serverNumber[e];
+ entry->serverUnique[e - 1] = entry->serverUnique[e];
entry->serverPartition[e - 1] = entry->serverPartition[e];
entry->serverFlags[e - 1] = entry->serverFlags[e];
}
/* Changes the RW site only */
void
-Lp_SetRWValue(struct nvldbentry *entry, afs_uint32 oserver, afs_int32 opart,
+Lp_SetRWValue(struct nvldbentry *entryp, afs_uint32 oserver, afs_int32 opart,
+ afs_uint32 nserver, afs_int32 npart)
+{
+ struct uvldbentry uentry;
+
+ nvlentry_to_uvlentry(entryp, &uentry);
+ SetAValue(&uentry, oserver, opart, nserver, npart, ITSRWVOL);
+ uvlentry_to_nvlentry(&uentry, entryp);
+}
+
+void
+Lp_SetRWValueU(struct uvldbentry *entry, afs_uint32 oserver, afs_int32 opart,
afs_uint32 nserver, afs_int32 npart)
{
SetAValue(entry, oserver, opart, nserver, npart, ITSRWVOL);
/* Changes the RO site only */
void
-Lp_SetROValue(struct nvldbentry *entry, afs_uint32 oserver,
+Lp_SetROValue(struct nvldbentry *entryp, afs_uint32 oserver,
+ afs_int32 opart, afs_uint32 nserver, afs_int32 npart)
+{
+ struct uvldbentry uentry;
+
+ nvlentry_to_uvlentry(entryp, &uentry);
+ SetAValue(&uentry, oserver, opart, nserver, npart, ITSROVOL);
+ uvlentry_to_nvlentry(&uentry, entryp);
+}
+
+void
+Lp_SetROValueU(struct uvldbentry *entry, afs_uint32 oserver,
afs_int32 opart, afs_uint32 nserver, afs_int32 npart)
{
SetAValue(entry, oserver, opart, nserver, npart, ITSROVOL);
/* Returns success if this server and partition matches the RW entry */
int
Lp_Match(afs_uint32 server, afs_int32 part,
- struct nvldbentry *entry)
+ struct nvldbentry *entryp)
+{
+ struct uvldbentry uentry;
+
+ nvlentry_to_uvlentry(entryp, &uentry);
+ if (FindIndex(&uentry, server, part, ITSRWVOL) == -1)
+ return 0;
+ uvlentry_to_nvlentry(&uentry, entryp);
+ return 1;
+}
+
+int
+Lp_MatchU(afs_uint32 server, afs_int32 part,
+ struct uvldbentry *entry)
{
if (FindIndex(entry, server, part, ITSRWVOL) == -1)
return 0;
/* Return the index of the RO entry (plus 1) if it exists, else return 0 */
int
-Lp_ROMatch(afs_uint32 server, afs_int32 part, struct nvldbentry *entry)
+Lp_ROMatch(afs_uint32 server, afs_int32 part, struct nvldbentry *entryp)
+{
+ struct uvldbentry uentry;
+ int idx;
+
+ nvlentry_to_uvlentry(entryp, &uentry);
+ idx = (FindIndex(&uentry, server, part, ITSROVOL) + 1);
+ if (idx)
+ uvlentry_to_nvlentry(&uentry, entryp);
+ return idx;
+}
+
+int
+Lp_ROMatchU(afs_uint32 server, afs_int32 part, struct uvldbentry *entry)
{
return (FindIndex(entry, server, part, ITSROVOL) + 1);
}
/* Return the index of the RW entry if it exists, else return -1 */
int
-Lp_GetRwIndex(struct nvldbentry *entry)
+Lp_GetRwIndex(struct nvldbentry *entryp)
+{
+ struct uvldbentry uentry;
+ int idx;
+
+ nvlentry_to_uvlentry(entryp, &uentry);
+ idx = (FindIndex(&uentry, 0, 0, ITSRWVOL));
+ if (idx > -1)
+ uvlentry_to_nvlentry(&uentry, entryp);
+ return idx;
+}
+
+int
+Lp_GetRwIndexU(struct uvldbentry *entry)
{
return (FindIndex(entry, 0, 0, ITSRWVOL));
}