421 char cModule[32]=
"rawCheckObjlist";
453 int iif = 0, ii1 = 0, ii2 = 0;
460 int iihihi1 = 0, iihihi2 = 0, iHiHiValcur = 0, iihihicur = 0;
461 int iihilo1 = 0, iihilo2 = 0, iHiLoValcur = 0, iihilocur = 0;
462 int iilohi1 = 0, iilohi2 = 0, iLoHiValcur = 0, iilohicur = 0;
476 unsigned int iRestoTopValues = 0,
477 iRestoHiHiValues = 0,
478 iRestoHiLoValues = 0,
479 iRestoLoHiValues = 0,
480 iRestoLoLoValues = 0;
482 unsigned int iRestoTopMin = 0,
506 char *pcflcomp, *pcolcomp;
507 int *piflcomp, *piolcomp;
511 char *pcflsort, *pcolsort;
512 int *piflsort, *piolsort;
534 int ii, jj, jjMin = 0;
557 pcolcomp = *pcObjComp;
558 piolcomp = (
int *) pcolcomp;
560 psObjComp0 = psObjComp;
567 "-E- %s: file list too long: %d entries, only %d allowed\n",
568 cModule, iFileComp, ii);
575 "\n-D- begin %s: overall %d objects, in 1st buffer %d objects\n",
576 cModule, iFileAll, iobj0);
577 fprintf(
fLogFile,
" compressed: %d objects\n", iFileComp);
581 " first file %s, first obj %s%s\n",
590 for (jj=1; jj<=iFileAll; jj++)
593 "DDDD %d: file %s (%p)\n", jj, psFile->
cFile, psFile);
607 for (jj=1; jj<=iFileAll; jj++)
610 if (strlen(psObj->
cNamell) < 2)
613 " object %d(%d): ignored\n", iiObj, jj);
615 goto gNextObjUnstage;
619 memcpy((
char *) psObjComp, (
char *) psObj,
iRetrList);
621 "%d(%d): obj %s%s copied (Comp)\n", iiObj, jj,
622 psObjComp->cNamehl, psObjComp->cNamell);
631 " buffer %d: last obj (no. %d) handled\n",
634 piptr = (
int **) psObj;
638 " buffer %d: last obj buffer\n", iiBuf);
648 " new buffer %d, %d objs, first: %s%s|\n",
649 iiBuf, iobj, psObj->cNamehl, psObj->cNamell);
655 goto gEndCheckObjlist;
661 iFileBufComp =
sizeof(int) + iFileComp*
sizeof(
srawFileList);
662 if ((pcFileComp = (
char *) calloc(
663 (
unsigned) iFileBufComp,
sizeof(
char) ) ) == NULL)
666 "-E- %s: allocating filelist buffer (Comp, %d byte)\n",
667 cModule, iFileBufComp);
669 fprintf(
fLogFile,
" %s\n", strerror(errno));
670 perror(
"-E- allocating filelist buffer (Comp)");
675 " filelist buffer (Comp) allocated (size %d)\n", iFileBufComp);
677 piflcomp = (
int *) pcFileComp;
678 piflcomp[0] = iFileComp;
680 psFileComp0 = psFileComp;
682 if ( (pcFileSort = (
char *) calloc(
683 (
unsigned) iFileBufComp,
sizeof(
char)) ) == NULL)
686 "-E- %s: allocating filelist buffer (Sort, %d byte)\n",
687 cModule, iFileBufComp);
689 fprintf(
fLogFile,
" %s\n", strerror(errno));
690 perror(
"-E- allocating filelist buffer (Sort)");
695 " filelist buffer (Sort) allocated (size %d)\n", iFileBufComp);
697 piflsort = (
int *) pcFileSort;
698 piflsort[0] = iFileComp;
700 psFileSort0 = psFileSort;
702 iObjBufComp =
sizeof(int) + iFileComp*
sizeof(
srawRetrList);
703 if ( (pcObjSort = (
char *) calloc(
704 (
unsigned) iObjBufComp,
sizeof(
char)) ) == NULL )
707 "-E- %s: allocating objectlist buffer (%d byte)\n",
708 cModule, iObjBufComp);
710 fprintf(
fLogFile,
" %s\n", strerror(errno));
711 perror(
"-E- allocating objlist buffer");
716 " objlist buffer (Sort) allocated (size %d)\n", iObjBufComp);
718 pcolsort = pcObjSort;
719 piolsort = (
int *) pcolsort;
720 piolsort[0] = iFileComp;
722 psObjSort0 = psObjSort;
726 for (jj=1; jj<=iFileAll; jj++)
729 for (ii=0; ii<=5; ii++)
732 iaValue[jj][ii] = -1;
744 fprintf(
fLogFile,
"scan objects for sort criteria:\n");
747 for (jj=1; jj<=iFileAll; jj++)
752 "DDD %d (comp %d): obj %s (%p), file %s (%p)\n",
753 iiObj, jj, psObj->
cNamell, psObj, psFile->
cFile, psFile);
755 if (strlen(psObj->
cNamell) < 2)
759 " object %d(%d): ignored\n", iiObj, jj);
767 " object %d(%d) %s%s: in read cache\n",
774 memcpy((
char *) psObjComp, (
char *) psObj,
iRetrList);
780 "%d: read cache obj %s%s (objId %u-%u) copied (Comp)\n",
781 iReadCache, psObjComp->cNamehl, psObjComp->cNamell,
782 psObjComp->iObjHigh, psObjComp->iObjLow);
784 " orig file name %s (%p)\n",
785 psFile->
cFile, psFile);
787 " file name %s copied (Comp: %p)\n",
788 psFileComp->
cFile, psFileComp);
789 if (jj == iFileAll) fprintf(
fLogFile,
790 " in last buffer %d: last obj (no. %d) handled\n",
805 " object %d(%d) %s%s: in write cache\n",
812 memcpy((
char *) psObjSort, (
char *) psObj,
iRetrList);
817 "%d: write cache obj %s%s (%u-%u) copied (Sort)\n",
818 iWriteCache, psObjSort->cNamehl, psObjSort->cNamell,
819 psObjSort->iObjHigh, psObjSort->iObjLow);
821 if (jj == iFileAll) fprintf(
fLogFile,
822 " in last buffer %d: last obj (no. %d) handled\n",
837 " object %d(%d) %s%s: top restore field %d\n",
845 "-W- object %d(%d) %s%s: hihi restore field %d\n",
853 " object %d(%d) %s%s: hilo restore field %d\n",
861 "-W- object %d(%d) %s%s: lohi restore field %d\n",
869 " object %d(%d) %s%s: lolo restore field %d\n",
879 " buffer %d: last obj (no. %d) handled\n",
882 piptr = (
int **) psObj;
886 " buffer %d: last obj buffer\n", iiBuf);
896 " new buffer %d, %d objs, first: %s%s|\n",
903 " usage of restore fields: %u-%u-%u-%u-%u\n",
904 iRestoTop, iRestoHiHi, iRestoHiLo, iRestoLoHi, iRestoLoLo);
910 psObjSort = psObjSort0;
911 psFileSort = psFileSort0;
913 for (ii=1; ii<=iWriteCache; ii++)
915 memcpy((
char *) psObjComp, (
char *) psObjSort,
iRetrList);
926 if ( ((iReadCache) || (iWriteCache)) && (iDebug == 2) )
928 psObjComp = psObjComp0;
929 psFileComp = psFileComp0;
934 "%d read cache entries (Comp)\n", iReadCache);
935 for (ii=1; ii<=iReadCache; ii++)
937 fprintf(
fLogFile,
" %d: obj %s%s, file %s\n",
948 "%d write cache entries (Comp)\n", iWriteCache);
949 for (ii=1; ii<=iWriteCache; ii++)
951 jj = iReadCache + ii;
952 fprintf(
fLogFile,
" %d: obj %s%s, file %s\n",
962 if (iReadCache + iWriteCache == iFileComp)
963 goto gEndCheckObjlist;
967 iFileSort = iFileComp - iReadCache - iWriteCache;
978 "DDD TSM restore values before sorting:\n");
981 for (jj=1; jj<=iFileAll; jj++)
984 if (iaValue[jj][0] < 3)
989 " %d: (%d) ignored", jj, iaValue[jj][0]);
998 goto gNextObjCompress;
1002 iaCompValue[ii][0] = iaValue[jj][0];
1003 iaCompValue[ii][1] = iaValue[jj][1];
1004 iaCompValue[ii][2] = iaValue[jj][2];
1005 iaCompValue[ii][3] = iaValue[jj][3];
1006 iaCompValue[ii][4] = iaValue[jj][4];
1007 iaCompValue[ii][5] = iaValue[jj][5];
1010 " %d(%d): %d %d-%d-%d-%d-%d\n", jj, ii,
1011 iaValue[jj][0], iaValue[jj][1], iaValue[jj][2],
1012 iaValue[jj][3], iaValue[jj][4], iaValue[jj][5]);
1014 memcpy((
char *) psObjSort, (
char *) psObj,
iRetrList);
1025 " buffer %d: last obj (no. %d) handled\n",
1028 piptr = (
int **) psObj;
1032 " buffer %d: last obj buffer\n", iiBuf);
1042 " new buffer %d, %d objs, first: %s%s\n",
1043 iiBuf, iobj, psObj->cNamehl, psObj->cNamell);
1048 if (ii != iFileSort)
1051 "-E- %s: inconsistent no. of TSM files: %d - %d\n",
1052 cModule, iFileSort, ii);
1062 "DDD list of compressed TSM objs/files (ps...Sort):\n");
1064 for (jj=1; jj<=iFileSort; jj++)
1067 iaValTop[jj] = iaCompValue[jj][1];
1072 iaValHiHi[jj] = iaCompValue[jj][2];
1077 iaValHiLo[jj] = iaCompValue[jj][3];
1082 iaValLoHi[jj] = iaCompValue[jj][4];
1087 iaValLoLo[jj] = iaCompValue[jj][5];
1095 fprintf(
fLogFile,
" %d: obj %s%s, file %s\n",
1105 iisort2 = iFileSort;
1114 for (jj=iisort1; jj<=iisort2; jj++)
1116 if (iaIndNew[jj] != iaIndex[jj])
1120 iaValHiHi[jj] = iaCompValue[ii1][2];
1122 iaValHiLo[jj] = iaCompValue[ii1][3];
1124 iaValLoHi[jj] = iaCompValue[ii1][4];
1126 iaValLoLo[jj] = iaCompValue[ii1][5];
1132 memcpy(&iaIndex[iisort1], &iaIndNew[iisort1],
1133 (
unsigned) iFileSort*
iint);
1138 "DDD restore order after top sorting (%d changes):\n",
1140 for (jj=iisort1; jj<=iisort2; jj++)
1143 " %d: index %d, values: %u-%u-%u-%u-%u\n",
1144 jj, iaIndNew[jj], iaValTop[jj],
1145 iaValHiHi[jj], iaValHiLo[jj],
1146 iaValLoHi[jj], iaValLoLo[jj]);
1150 iRestoTopValues = 1;
1151 iRestoTopMin = iaValTop[iisort1];
1152 for (jj=iisort1+1; jj<=iisort2; jj++)
1154 if (iaValTop[jj] > iRestoTopMin)
1156 iRestoTopMin = iaValTop[jj];
1162 "%d different top restore values\n", iRestoTopValues);
1168 for (iTopValcur=1; iTopValcur<=iRestoTopValues; iTopValcur++)
1170 if (iTopValcur == iRestoTopValues)
1174 iRestoTopMin = iaValTop[iitop1];
1175 for (jj=iitop1+1; jj<=iFileSort; jj++)
1177 if (iaValTop[jj] > iRestoTopMin)
1183 if (jj == iFileSort)
1188 if (iitop1 == iitop2)
1191 " %d. top restore value %d: only one object (%d)\n",
1192 iTopValcur, iaValTop[iitop1], iitop1);
1194 if (iTopValcur == iRestoTopValues)
1198 iitop1 = iitop2 + 1;
1203 " %d. top restore value %d: objs %d - %d\n",
1204 iTopValcur, iaValTop[iitop1], iitop1, iitop2);
1215 if (iitop2 - iitop1)
1222 for (jj=iitop1; jj<=iitop2; jj++)
1224 if (iaIndNew[jj] != iaIndex[jj])
1228 iaValTop[jj] = iaCompValue[ii1][1];
1230 iaValHiHi[jj] = iaCompValue[ii1][2];
1232 iaValLoHi[jj] = iaCompValue[ii1][4];
1234 iaValLoLo[jj] = iaCompValue[ii1][5];
1240 ii1 = iitop2 - iitop1 + 1;
1241 memcpy(&iaIndex[iitop1], &iaIndNew[iitop1],
1242 (
unsigned) ii1*
iint);
1247 " restore order after hilo sorting (%d - %d: %d changes):\n",
1248 iitop1, iitop2, iDiff);
1249 for (jj=iitop1; jj<=iitop2; jj++)
1252 " %d: index %d, values: %u-%u-%u-%u-%u\n",
1253 jj, iaIndNew[jj], iaValTop[jj],
1254 iaValHiHi[jj], iaValHiLo[jj],
1255 iaValLoHi[jj], iaValLoLo[jj]);
1259 iRestoHiLoValues = 1;
1260 iRestoHiLoMin = iaValHiLo[iitop1];
1262 for (jj=iitop1+1; jj<=iitop2; jj++)
1264 if (iaValHiLo[jj] > iRestoHiLoMin)
1266 iRestoHiLoMin = iaValHiLo[jj];
1272 " %d different hilo restore values\n", iRestoHiLoValues);
1276 iRestoHiLoValues = 1;
1282 for (iHiLoValcur=1; iHiLoValcur<=iRestoHiLoValues; iHiLoValcur++)
1284 if (iHiLoValcur == iRestoHiLoValues)
1288 iRestoHiLoMin = iaValHiLo[iihilo1];
1289 for (jj=iitop1+1; jj<=iitop2; jj++)
1291 if (iaValHiLo[jj] > iRestoHiLoMin)
1302 if (iihilo1 == iihilo2)
1305 " %d. hilo restore value %d: only one object (%d)\n",
1306 iHiLoValcur, iaValHiLo[iihilo1], iihilo1);
1308 if (iHiLoValcur == iRestoHiLoValues)
1312 iihilo1 = iihilo2 + 1;
1317 " %d. hilo restore value %d: objs %d - %d\n",
1318 iHiLoValcur, iaValHiLo[iihilo1], iihilo1, iihilo2);
1328 if (iihilo2 - iihilo1)
1331 iihilo1, iihilo2, iaIndex, iaIndNew);
1335 for (jj=iihilo1; jj<=iihilo2; jj++)
1337 if (iaIndNew[jj] != iaIndex[jj])
1341 iaValTop[jj] = iaCompValue[ii1][1];
1343 iaValHiHi[jj] = iaCompValue[ii1][2];
1345 iaValHiLo[jj] = iaCompValue[ii1][3];
1347 iaValLoHi[jj] = iaCompValue[ii1][4];
1353 ii1 = iihilo2 - iihilo1 + 1;
1354 memcpy(&iaIndex[iihilo1], &iaIndNew[iihilo1],
1355 (
unsigned) ii1*
iint);
1360 " restore order after lolo sorting (%d - %d: %d changes):\n",
1361 iihilo1, iihilo2, iDiff);
1362 for (jj=iihilo1; jj<=iihilo2; jj++)
1365 " %d: index %d, values: %u-%u-%u-%u-%u\n",
1366 jj, iaIndNew[jj], iaValTop[jj],
1367 iaValHiHi[jj], iaValHiLo[jj],
1368 iaValLoHi[jj], iaValLoLo[jj]);
1373 iRestoLoLoValues = 1;
1377 iRestoLoLoValues = 0;
1379 iihilo1 = iihilo2 + 1;
1385 iRestoHiLoValues = 0;
1387 iitop1 = iitop2 + 1;
1392 iRestoTopValues = 0;
1400 "DDD final restore order after sorting:\n");
1401 for (jj=iisort1; jj<=iisort2; jj++)
1405 " %d: index %d, values: %u-%u-%u-%u-%u\n",
1406 jj, iaIndex[jj], iaCompValue[ii][1], iaCompValue[ii][2],
1407 iaCompValue[ii][3], iaCompValue[ii][4], iaCompValue[ii][5]);
1424 "DDD copy TSM objects to temp destination for compression\n");
1426 for (jj = 1; jj <= iFileAll; jj++)
1429 if (iaValue[jj][0] < 3)
1433 fprintf(
fLogFile,
" (%d): ignored", jj);
1446 goto gNextCopy2Temp;
1452 memcpy((
char *) psObjSort, (
char *) psObj,
iRetrList);
1458 " %d(%d): obj %s%s (objId %u-%u) copied (Comp), retrId %u-%u-%u-%u-%u\n",
1459 iiObj, jj, psObjSort->cNamehl, psObjSort->cNamell,
1460 psObjSort->iObjHigh, psObjSort->iObjLow,
1461 psObjSort->iRestoHigh, psObjSort->iRestoHighHigh,
1462 psObjSort->iRestoHighLow, psObjSort->iRestoLowHigh,
1463 psObjSort->iRestoLow);
1476 " buffer %d: last obj (no. %d) handled\n",
1478 piptr = (
int **) psObj;
1482 " %d: last obj buffer\n", iiBuf);
1492 " %d: new buffer, %d objs, first: |%s%s|\n",
1493 iiBuf, iobj, psObj->cNamehl, psObj->cNamell);
1503 "DDD compressed list of TSM objects (not yet sorted):\n");
1505 for (jj=1; jj<=iFileSort; jj++)
1507 fprintf(
fLogFile,
" %d: obj %s%s, file %s\n",
1515 if (icount != iFileSort)
1518 "-E- %s: unexpected no. of objects found: %d, expected %d\n",
1519 cModule, icount, iFileSort);
1530 "DDD copy TSM objects in correct order to final destination\n");
1533 for (jj = 1; jj <= iFileSort; jj++)
1538 psFileSort += iDiff;
1542 memcpy((
char *) psObjComp, (
char *) psObjSort,
iRetrList);
1548 " %d: TSM obj %s%s (index %d, objId %u-%u) copied (Comp), retrId %u-%u-%u-%u-%u\n",
1549 jj, psObjSort->cNamehl, psObjSort->cNamell, ii2,
1550 psObjSort->iObjHigh, psObjSort->iObjLow,
1551 psObjSort->iRestoHigh, psObjSort->iRestoHighHigh,
1552 psObjSort->iRestoHighLow, psObjSort->iRestoLowHigh, psObjSort->iRestoLow);
1561 iFileAll = iReadCache + iWriteCache + iFileSort;
1564 psObjComp = psObjComp0;
1565 psFileComp = psFileComp0;
1567 "final list of all objects (compressed and sorted):\n");
1569 for (jj=1; jj<=iFileAll; jj++)
1572 " %d: obj %s%s, file %s, objId %u-%u, retrId %u-%u-%u-%u-%u",
1594 memset(pcfl, 0x00, (
unsigned) iFileBufComp);
1595 memcpy(pcfl, pcFileComp, (
unsigned) iFileBufComp);
1599 "-D- end %s\n\n", cModule);
1974 char cModule[32] =
"rawGetFilelistEntries";
1980 int iFilesIgnored = 0;
1988 char cQualifier[16] =
".filelist";
1989 const char *pcLeading =
"@";
2001 int iGenericEntries = 0;
2002 int iSingleEntries = 0;
2004 FILE *fiFile = NULL;
2008 int *piFilelist, *piFilelisto;
2015 printf(
"\n-D- begin %s\n", cModule);
2017 iDataFS = *piDataFS;
2021 if ((
int) strlen(pcFileName) >= imax)
2024 "-E- %s: file name too long (max %d)\n",
2027 goto gErrorFilelist;
2029 strcpy(cFileName, pcFileName);
2031 pccT = (
char *) strrchr(pcFileName, *pcLeading);
2034 pccE = (
char *) strrchr(pccT, *pcObjDelim);
2042 " no leading '%s' in file name %s\n", pcLeading, pcFileName);
2047 ploc = strrchr(cFileName, pcc[0]);
2052 if (strcmp(ploc, pcc) != 0)
2055 " no trailing %s\n", cQualifier);
2062 " no trailing %s in file name %s\n", cQualifier, pcFileName);
2067 " %s is a filelist\n", cFileName);
2069 fiFile = fopen(pcFileName,
"r");
2072 fprintf(
fLogFile,
"-E- %s: opening filelist %s\n",
2073 cModule, pcFileName);
2075 fprintf(
fLogFile,
" %s\n", strerror(errno));
2076 perror(
"-E- opening filelist");
2079 goto gErrorFilelist;
2082 " filelist %s opened\n", pcFileName);
2084 piFilelisto = piFilelist;
2085 iMaxEntries = *piFilelist;
2087 " max no. of entries in filelist buffer: %d\n", iMaxEntries);
2089 "DDD piFilelist %p, *piFilelist %d\n",
2090 piFilelist, *piFilelist);
2094 pFilelistc = pFilelist;
2099 pccE = fgets(cEntry, imax, fiFile);
2101 if ( (pccE != NULL) && (strlen(pccE) > 1) )
2105 memset(cTemp,
'\0', strlen(cTemp));
2110 if ( (*pccE !=
'\0') && (*pccE !=
'\n') && (*pccE !=
'\r') &&
2113 strncpy(pccT, pccE, 1);
2122 strncpy(pccT,
"\0", 1);
2125 "'%s' -> '%s': %d chars removed\n", cEntry, cTemp, iDelCount);
2135 " path prefix '%s' in first filelist entry found\n",
2142 if (strlen(pccT) == 0)
2145 "-W- no path name found after path prefix: %s\n",
2150 ii = strlen(pccT) - 1;
2153 if (strncmp(pcc,
"/", 1) == 0)
2154 strncpy(
cPath, pccT, (
unsigned) ii);
2156 strcpy(
cPath, pccT);
2159 " path '%s' for files in filelist\n",
cPath);
2167 strcpy(pcDataFS,
cPath);
2170 " central data FS path %s\n",
cPath);
2181 "-E- only one path specification in file list allowed, %s and following files ignored\n",
2187 while ( (ploc = strchr(cTemp, *
pcPerc)) != NULL)
2190 fprintf(
fLogFile,
"-W- replace %s", cTemp);
2193 fprintf(
fLogFile,
" by %s\n", cTemp);
2196 if ( (iEntries == iMaxEntries) &&
2201 " entry buffer full, reallocate: max %d entries\n",
2205 piFilelisto = piFilelist;
2206 piFilelist = (
int *) calloc(
2207 (
unsigned) iSizeBuffer,
sizeof(
char) );
2208 if (piFilelist == NULL)
2211 "-E- %s: reallocating filelist buffer (size %d)\n",
2212 cModule, iSizeBuffer);
2214 fprintf(
fLogFile,
" %s\n", strerror(errno));
2215 perror(
"-E- reallocating filelist buffer");
2218 goto gErrorFilelist;
2222 " filelist entry buffer reallocated (size %d)\n",
2225 *piFilelist = iMaxEntries;
2227 "DDD piFilelist %p, *piFilelist %d\n",
2228 piFilelist, *piFilelist);
2231 pFilelistco = pFilelist;
2232 pFilelist = pFilelistc;
2234 for (ii=1; ii<=iEntries; ii++)
2237 "DDD pFilelistc %p\n", pFilelistc);
2238 strcpy(pFilelistc->
cFile, pFilelistco->
cFile);
2244 " %d old entries copied to new buffer, next:\n",
2248 "DDD free piFilelisto %p\n", piFilelisto);
2250 piFilelisto = piFilelist;
2255 "DDD pFilelistc %p\n", pFilelistc);
2257 if ( (ploc = strchr(cTemp, *pcObjDelim)) != NULL)
2260 if (iFilesIgnored == 1) fprintf(
fLogFile,
2261 "-W- file-specific path not yet implemented in filelist\n");
2262 fprintf(
fLogFile,
"-W- %s ignored\n", cTemp);
2269 strcat(pFilelistc->
cFile,
"/");
2271 strcat(pFilelistc->
cFile, cTemp);
2275 " %3d: %s \n", iEntries, pFilelistc->
cFile);
2284 *piGlobalDir = iGlobalDir;
2286 pFilelistc = pFilelist;
2289 fprintf(
fLogFile,
" after allocation:\n");
2290 for (ii=1; ii<=iEntries; ii++)
2293 " %3da: %s \n", ii, pFilelistc->
cFile);
2301 pFilelistc = pFilelist;
2303 for (ii=1; ii<iEntries; ii++)
2305 if (strlen(pFilelistc->
cFile) == 0)
2311 pFilelistco = pFilelistc;
2313 for (jj=ii+1; jj<=iEntries; jj++)
2315 if (strcmp(pFilelistc->
cFile, pFilelistco->
cFile) == 0)
2318 fprintf(
fLogFile,
"-W- duplicate entry %s removed\n",
2319 pFilelistco->
cFile);
2320 strcpy(pFilelistco->
cFile,
"");
2332 " %d duplicate entries found in list\n", iRemove);
2334 " no duplicate entries found in list\n");
2340 fprintf(
fLogFile,
" no valid entries found in list\n");
2344 pFilelistc = pFilelist;
2347 fprintf(
fLogFile,
" after removal of duplicates:\n");
2348 for (ii=1; ii<=iEntries; ii++)
2351 " %3db: %s \n", ii, pFilelistc->
cFile);
2359 pFilelistc = pFilelist;
2360 for (ii=1; ii<iEntries; ii++)
2362 if (strlen(pFilelistc->
cFile) == 0)
2364 pFilelistco = pFilelistc;
2366 pFilelistc0 = pFilelistc;
2367 for (jj=ii+1; jj<=iEntries; jj++)
2369 strcpy(pFilelistc0->
cFile, pFilelistco->
cFile);
2378 iEntries -= iRemove;
2381 *piFilelist = iEntries;
2384 pFilelistc = pFilelist;
2385 for (ii=1; ii<=iEntries; ii++)
2392 ploc = strchr(pFilelistc->
cFile, *
pcQM);
2404 if ( (iGeneric) && (iSingle) )
2411 if ( (iGeneric) && (iSingle) )
2413 piFilelisto = piFilelist;
2417 piFilelist = (
int *) calloc((
unsigned) iSizeBuffer,
sizeof(
char));
2418 if (piFilelist == NULL)
2421 "-E- %s: allocating ordered filelist buffer (size %d)\n",
2422 cModule, iSizeBuffer);
2424 fprintf(
fLogFile,
" %s\n", strerror(errno));
2425 perror(
"-E- allocating ordered filelist buffer");
2428 goto gErrorFilelist;
2432 " ordered filelist buffer allocated (size %d)\n",
2436 "DDD piFilelist %p, *piFilelist %d\n",
2437 piFilelist, *piFilelist);
2440 pFilelist = pFilelistc;
2442 iGenericEntries = 0;
2445 for (ii=1; ii<=iEntries; ii++)
2454 ploc = strchr(pFilelistco->
cFile, *
pcQM);
2469 strcpy(pFilelistc->
cFile, pFilelistco->
cFile);
2470 strcpy(pFilelistco->
cFile,
"");
2482 for (ii=1; ii<=iEntries; ii++)
2484 if (strlen(pFilelistco->
cFile) != 0)
2486 strcpy(pFilelistc->
cFile, pFilelistco->
cFile);
2494 " %d generic file names, followed by %d non-generic file names\n",
2495 iGenericEntries, iSingleEntries);
2499 pFilelistc = pFilelist;
2502 fprintf(
fLogFile,
" after reordering:\n");
2503 for (ii=1; ii<=iEntries; ii++)
2506 " %3dc: %s \n", ii, pFilelistc->
cFile);
2512 *piEntries = iEntries;
2515 if ( (iDebug == 2) && (pccT) ) fprintf(
fLogFile,
2516 "DDD piFilelist %p, *piFilelist %d\n",
2517 piFilelist, *piFilelist);
2522 iRC = fclose(fiFile);
2525 fprintf(
fLogFile,
"-E- %s: closing filelist %s\n",
2526 cModule, pcFileName);
2528 fprintf(
fLogFile,
" %s\n", strerror(errno));
2529 perror(
"-E- closing filelist");
2533 *piDataFS = iDataFS;
2537 printf(
"-D- end %s\n\n", cModule);
2554 char cModule[32] =
"rawGetWSInfo";
2575 int iSleepClean = 0;
2581 char cPoolNameRand[32] =
"RetrievePool";
2582 char cPoolNameTemp[32] =
"StagePool";
2583 int iHardwareFree = 0;
2584 int iPoolRandFree = 0;
2586 int iRandomExcess = 0;
2588 int iPoolTempAvail = 0;
2589 int iPoolTempMax = 0;
2590 int iPoolTempMaxWS = 0;
2591 int iPoolTempFree = 0;
2595 int iTempSizeUnavail = 0;
2602 int iWorkSizeSta = 0;
2603 int iWorkFilesSta = 0;
2605 int iWorkSizeStaTemp = 0;
2607 int iWorkFilesStaTemp = 0;
2608 int iWorkSizeStaRand = 0;
2610 int iWorkFilesStaRand = 0;
2611 int iWorkSizeEst = 0;
2612 int iWorkFilesEst = 0;
2614 int iWorkStatus = 0;
2619 char cMsgPref[8] =
"";
2620 char cMisc[128] =
"";
2627 printf(
"\n-D- begin %s\n", cModule);
2629 piBuffer = pCliActionComm->
piBuffer;
2630 iSocket = pCliActionComm->
iSocket;
2631 iAction = pCliActionComm->
iAction;
2636 iPoolId = pCliActionComm->
iStatus;
2653 printf(
" action %d", iAction);
2655 printf(
", print pool info");
2657 printf(
", poolId %d\n", iPoolId);
2664 pcc = (
char *) piBuffer;
2669 printf(
"-E- receiving header pool status from master server\n");
2673 iIdent = ntohl(pPoolInfo->
iIdent);
2674 iStatus = ntohl(pPoolInfo->
iPoolNo);
2678 " header pool status received (%d bytes): ident %d, status %d, attrlen %d\n",
2679 iRC, iIdent, iStatus, iAttrLen);
2688 printf(
"-E- received error status from server");
2690 printf(
" instead of pool info:\n");
2697 if (iRC < 0) printf(
2698 "-E- receiving error msg from server, rc = %d\n",
2700 else printf(
" %s\n", pcc);
2702 else printf(
" no error message available\n");
2708 "-E- unexpected status (type %d) received from server\n",
2715 "-E- unexpected header (%d) received from server\n",
2724 iBufPool = iAttrLen;
2728 pPoolInfoData0 = pPoolInfoData;
2734 if ( (iRC = recv( iSocket, pcc, (
unsigned) iBuf, 0 )) <= 0)
2736 if (iRC < 0) printf(
2737 "-E- %s: receiving pool info\n", cModule);
2740 ii = iBufPool - iBuf;
2742 "-E- %s: connection to entry server broken, %d byte of pool info (%d byte) received\n",
2743 cModule, ii, iBufPool);
2746 printf(
" %s\n", strerror(errno));
2747 perror(
"-E- receiving pool info");
2758 " stage pool status received (%d bytes)\n", iBufPool);
2763 (iAction ==
STAGE) )
2764 for (iPoolcur=1; iPoolcur<=iPoolmax; iPoolcur++)
2768 iHardwareFree = ntohl(pPoolInfoData->
iFreeSizeHW);
2769 iPoolRandFree = ntohl(pPoolInfoData->
iFreeSize);
2772 iPoolTempFree = ntohl(pPoolInfoData->
iFreeSize);
2774 if (strcmp(pPoolInfoData->
cPoolName,
"RetrievePool") == 0)
2776 if (strcmp(pPoolInfoData->
cPoolName,
"StagePool") == 0)
2783 if (iPrintPoolInfo) printf(
2784 "-I- overall HW space ATL server%d %8d MByte, free %8d MByte\n",
2786 ntohl(pPoolInfoData->
iMaxSizeHW), iHardwareFree);
2788 if ( (iPoolId == iPoolMode) || (iPoolId == 0) )
2790 printf(
" %s: used for 'gstore retrieve'\n",
2793 iPoolRandUsed = ntohl(pPoolInfoData->
iMaxSize) -
2795 if (iPoolRandFree < 0)
2796 iRandomExcess = -iPoolRandFree;
2799 " used space %8d MByte, %d files stored\n",
2800 iPoolRandUsed, ntohl(pPoolInfoData->
iFiles));
2804 if (iHardwareFree > 0) printf(
2805 " free space (%8d MByte) shared with StagePool\n",
2807 printf(
" no min file lifetime\n");
2815 if ( (iPoolId == iPoolMode) || (iPoolId == 0) )
2817 if (iPrintPoolInfo) printf(
2818 " %s: used for 'gstore stage'\n",
2820 iPoolTempAvail = ntohl(pPoolInfoData->
iFileAvail);
2822 iPoolTempUsed = ntohl(pPoolInfoData->
iMaxSize) -
2824 iPoolTempFree = iHardwareFree;
2825 if (iPoolTempFree < 0)
2828 if (iHardwareFree < iPoolTempFree)
2829 iTempSizeUnavail = iPoolTempFree - iHardwareFree;
2831 if ( (iPoolTempFree >= 0) && (iPrintPoolInfo) )
2833 printf(
" used space %8d MByte, %d files stored\n",
2834 iPoolTempUsed, ntohl(pPoolInfoData->
iFiles));
2836 (iPoolTempFree > 0) ) printf(
2837 " free space (%8d MByte) shared with RetrievePool\n",
2840 if (iPrintPoolInfo) printf(
2841 " min file availability of %d days guaranteed\n",
2848 if ( (iPoolMode == 2) &&
2851 iPoolTempMax = ntohl(pPoolInfoData->
iMaxSize);
2853 iPoolTempCheck = ntohl(pPoolInfoData->
iCheckSize);
2859 pPoolInfoData = pPoolInfoData0;
2868 *ppWorkSpace = pWorkSpace;
2873 printf(
"-E- receiving work space buffer header\n");
2877 printf(
"-D- header work space buffer received (%d bytes)\n",
2880 iIdent = ntohl(pWorkSpace->
iIdent);
2881 iStatus = ntohl(pWorkSpace->
iWorkId);
2891 if (iDebug) printf(
"\n");
2892 printf(
"-E- received error status from server");
2894 printf(
" instead of work space info:\n");
2899 pcc = (
char *) piBuffer;
2901 if (iRC < 0) printf(
2902 "-E- receiving error msg from server, rc = %d\n",
2904 else printf(
" %s\n", pcc);
2906 else printf(
" no error message available\n");
2912 "-E- unexpected status (%d) received from server\n",
2919 "-E- unexpected header (%d) received from server\n",
2932 if ( (iRC = recv( iSocket, pcc, (
unsigned) iBuf, 0 )) <= 0)
2934 if (iRC < 0) printf(
2935 "-E- %s: receiving work space info (%d byte)\n",
2939 ii = iAttrLen - iBuf;
2940 printf(
"-E- %s: connection to sender broken, %d byte of work space info (%d byte) received\n",
2941 cModule, ii, iAttrLen);
2944 printf(
" %s\n", strerror(errno));
2945 perror(
"-E- receiving work space info");
2956 printf(
" remainder work space buffer received (%d byte)\n",
2961 iWorkStatus = ntohl(pWorkSpace->
iStatus);
2969 iWorkSizeStaRand = iWorkSizeSta - iWorkSizeStaTemp;
2970 iWorkFilesStaRand = iWorkFilesSta - iWorkFilesStaTemp;
2977 printf(
" %d files, overall size %d MByte",
2978 iWorkFilesAll, iWorkSizeAll);
2980 printf(
", size estimated for %d files (%d MByte)\n",
2981 iWorkFilesEst, iWorkSizeEst);
2984 if (iWorkSizeSta == iWorkSizeAll)
2989 "\n all files already available on central disk\n");
2990 if ( (iPoolId == 2) &&
2994 " to get a guaranteed availability of %d days on disk pool use 'gstore stage'\n",
2998 else if (iWorkSizeSta)
3003 "\n %d files already available on central disk (%d MByte)\n",
3004 iWorkFilesSta, iWorkSizeSta);
3005 if (iWorkFilesStaTemp)
3007 " %d files already in %s (%d MByte)\n",
3008 iWorkFilesStaTemp, cPoolNameTemp, iWorkSizeStaTemp);
3010 " %d files still to be staged or currently being staged (%d MByte)\n",
3011 iWorkFilesAll-iWorkFilesSta,
3012 iWorkSizeAll - iWorkSizeSta);
3016 printf(
", all to be staged\n");
3029 if ( (iWorkStatus < 9) && (iWorkStatus != 0) )
3032 (iWorkStatus == 2) )
3034 strcpy(cMsgPref,
"-W-");
3035 printf(
"%s staging requested workspace '%s' completely may fail\n",
3036 cMsgPref, pcGenFile);
3040 strcpy(cMsgPref,
"-E-");
3041 printf(
"%s requested workspace '%s' cannot be staged:\n",
3042 cMsgPref, pcGenFile);
3045 if (iWorkStatus < 0)
3046 printf(
"%s staging disk pool currently unavailable\n",
3048 else if (iWorkStatus == 1)
3050 printf(
" currently free in %s: %d MByte\n",
3051 cPoolNameTemp, iPoolTempFree);
3053 " still needed: %d MByte (%d files)\n",
3054 iWorkSizeAll-iWorkSizeSta,
3055 iWorkFilesAll-iWorkFilesSta);
3057 printf(
"-I- Check later again!\n");
3059 "-I- Query work space status before retrying later!\n");
3061 else if ( (iWorkStatus == 2) || (iWorkStatus == 3) )
3063 if (iWorkStatus == 2) printf(
3064 "%s max work space allowed in '%s' is currently limited to %d MByte\n",
3065 cMsgPref, cPoolNameTemp, iPoolTempMaxWS);
3067 "%s overall size of %s is limited to %d MByte\n",
3068 cMsgPref, cPoolNameTemp, iPoolTempMax);
3070 if (iWorkStatus == 3) printf(
3071 "-I- Please reduce your work space requirements\n");
3073 else if (iWorkStatus < 9)
3075 "-E- unexpected workspace status received from server (%d)\n",
3079 printf(
"-D- end %s\n\n", cModule);
3084 if ( (iDebug) && (iWorkSizeSta != iWorkSizeAll) )
3088 iWorkSizeNew = iWorkSizeAll - iWorkSizeSta;
3091 if (iWorkSizeNew > iHardwareFree)
3093 printf(
"-D- currently unused in %s: %d MByte\n",
3094 cPoolNameTemp, iPoolTempFree);
3095 printf(
" currently free in %s: %d MByte, remainder temporarily used by other pools\n",
3096 cPoolNameTemp, iHardwareFree);
3099 printf(
"-D- currently free in %s: %d MByte\n",
3100 cPoolNameTemp, iHardwareFree);
3103 printf(
"-D- currently free in %s: %d MByte\n",
3104 cPoolNameTemp, iPoolTempFree);
3106 " to get all files on disk pool with a guaranteed availability of %d days:\n",
3108 printf(
" -> use 'gstore stage'\n");
3118 if (iWorkStatus >= 9)
3127 printf(
"-D- currently free (HW): %d MByte\n",
3130 " currently %d MByte unused in %s are allocated by other pools\n",
3131 ii*(-1), cPoolNameTemp);
3135 strcpy(cMisc,
"must be initiated (gstore stage)");
3137 strcpy(cMisc,
"is initiated");
3139 "-I- a clean job %s to provide the requested space\n",
3142 if (iWorkStatus > 9)
3145 iSleepClean = iWorkStatus;
3158 printf(
"-D- end %s\n\n", cModule);