@@ -216,22 +216,32 @@ BOOL CAPIHelp_Distributed::APIHelp_Distributed_DLStorage(LPCTSTR lpszMsgBuffer,
216216/* *******************************************************************
217217函数名称:APIHelp_Distributed_UPStorage
218218函数功能:通过分布式存储列表获得一个存储地址
219- 参数.一:pStl_ListBucket
219+ 参数.一:lpszMsgBuffer
220+ In/Out:In
221+ 类型:常量字符指针
222+ 可空:N
223+ 意思:输入要解析的URL
224+ 参数.二:pStl_ListBucket
220225 In/Out:In
221226 类型:容器指针
222227 可空:N
223228 意思:输入要解析的列表
224- 参数.二 :pSt_StorageBucket
229+ 参数.三 :pSt_StorageBucket
225230 In/Out:Out
226231 类型:数据结构指针
227232 可空:N
228233 意思:输出获取到的可用存储
234+ 参数.四:nMode
235+ In/Out:In
236+ 类型:整数型
237+ 可空:N
238+ 意思:输入LB的模式
229239返回值
230240 类型:逻辑型
231241 意思:是否成功
232242备注:
233243*********************************************************************/
234- BOOL CAPIHelp_Distributed::APIHelp_Distributed_UPStorage (list<XENGINE_STORAGEBUCKET>* pStl_ListBucket, XENGINE_STORAGEBUCKET* pSt_StorageBucket, int nMode)
244+ BOOL CAPIHelp_Distributed::APIHelp_Distributed_UPStorage (LPCTSTR lpszMsgBuffer, list<XENGINE_STORAGEBUCKET>* pStl_ListBucket, XENGINE_STORAGEBUCKET* pSt_StorageBucket, int nMode)
235245{
236246 APIHelp_IsErrorOccur = FALSE ;
237247
@@ -241,81 +251,91 @@ BOOL CAPIHelp_Distributed::APIHelp_Distributed_UPStorage(list<XENGINE_STORAGEBUC
241251 APIHelp_dwErrorCode = ERROR_STORAGE_MODULE_APIHELP_PARAMENT;
242252 return FALSE ;
243253 }
244- int nLastLevel = 99999 ;
245- list<XENGINE_STORAGEBUCKET> stl_BuckSelect;
246- // 先得到最小级别
247- for (auto stl_ListIterator = pStl_ListBucket->begin (); stl_ListIterator != pStl_ListBucket->end (); stl_ListIterator++)
254+ if (4 == nMode)
248255 {
249- // 只处理启用的
250- if (stl_ListIterator->bEnable )
256+ if (!APIHelp_Distributed_DLStorage (lpszMsgBuffer, pStl_ListBucket, pSt_StorageBucket))
251257 {
252- if (stl_ListIterator->nLevel < nLastLevel)
253- {
254- nLastLevel = stl_ListIterator->nLevel ; // 得到最小级别
255- }
258+ return FALSE ;
256259 }
257260 }
258- // 在来获得这个级别的列表
259- for (auto stl_ListIterator = pStl_ListBucket->begin (); stl_ListIterator != pStl_ListBucket->end (); stl_ListIterator++)
261+ else
260262 {
261- // 只处理启用的
262- if (stl_ListIterator->bEnable )
263+ int nLastLevel = 99999 ;
264+ list<XENGINE_STORAGEBUCKET> stl_BuckSelect;
265+ // 先得到最小级别
266+ for (auto stl_ListIterator = pStl_ListBucket->begin (); stl_ListIterator != pStl_ListBucket->end (); stl_ListIterator++)
263267 {
264- // 处理优先级
265- if (stl_ListIterator->nLevel == nLastLevel )
268+ // 只处理启用的
269+ if (stl_ListIterator->bEnable )
266270 {
267- int nListCount = 0 ;
268- __int64u nDirCount = 0 ; // 当前目录大小
269- CHAR** ppListFile;
270- SystemApi_File_EnumFile (stl_ListIterator->tszFilePath , &ppListFile, &nListCount, NULL , NULL , TRUE , 1 );
271- for (int j = 0 ; j < nListCount; j++)
271+ if (stl_ListIterator->nLevel < nLastLevel)
272272 {
273- struct __stat64 st_FStat;
274- _stat64 (ppListFile[j], &st_FStat);
275- nDirCount += st_FStat.st_size ;
273+ nLastLevel = stl_ListIterator->nLevel ; // 得到最小级别
276274 }
277- BaseLib_OperatorMemory_Free ((XPPPMEM)&ppListFile, nListCount);
278- // 如果当前目录大小大于设定的大小.那么忽略
279- if (nDirCount >= APIHelp_Distributed_GetSize (stl_ListIterator->tszBuckSize ))
275+ }
276+ }
277+ // 在来获得这个级别的列表
278+ for (auto stl_ListIterator = pStl_ListBucket->begin (); stl_ListIterator != pStl_ListBucket->end (); stl_ListIterator++)
279+ {
280+ // 只处理启用的
281+ if (stl_ListIterator->bEnable )
282+ {
283+ // 处理优先级
284+ if (stl_ListIterator->nLevel == nLastLevel)
280285 {
281- continue ;
286+ int nListCount = 0 ;
287+ __int64u nDirCount = 0 ; // 当前目录大小
288+ CHAR** ppListFile;
289+ SystemApi_File_EnumFile (stl_ListIterator->tszFilePath , &ppListFile, &nListCount, NULL , NULL , TRUE , 1 );
290+ for (int j = 0 ; j < nListCount; j++)
291+ {
292+ struct __stat64 st_FStat;
293+ _stat64 (ppListFile[j], &st_FStat);
294+ nDirCount += st_FStat.st_size ;
295+ }
296+ BaseLib_OperatorMemory_Free ((XPPPMEM)&ppListFile, nListCount);
297+ // 如果当前目录大小大于设定的大小.那么忽略
298+ if (nDirCount >= APIHelp_Distributed_GetSize (stl_ListIterator->tszBuckSize ))
299+ {
300+ continue ;
301+ }
302+ stl_BuckSelect.push_back (*stl_ListIterator);
282303 }
283- stl_BuckSelect.push_back (*stl_ListIterator);
284304 }
285305 }
286- }
287- // 通过指定模式获得一个key
288- if (!stl_BuckSelect.empty ())
289- {
290- APIHelp_IsErrorOccur = TRUE ;
291- APIHelp_dwErrorCode = ERROR_STORAGE_MODULE_APIHELP_NOTFOUND;
292- return FALSE ;
293- }
294- if (1 == nMode)
295- {
296- XNETHANDLE xhToken = 0 ;
297- BaseLib_OperatorHandle_Create (&xhToken, 0 , stl_BuckSelect.size (), FALSE );
298- if (xhToken == stl_BuckSelect.size ())
306+ // 通过指定模式获得一个key
307+ if (stl_BuckSelect.empty ())
299308 {
300- xhToken--;
309+ APIHelp_IsErrorOccur = TRUE ;
310+ APIHelp_dwErrorCode = ERROR_STORAGE_MODULE_APIHELP_NOTFOUND;
311+ return FALSE ;
301312 }
302- list<XENGINE_STORAGEBUCKET>::const_iterator stl_ListIterator = stl_BuckSelect.begin ();
303- for (XNETHANDLE i = 0 ; stl_ListIterator != stl_BuckSelect.end (); stl_ListIterator++, i++)
313+ if (1 == nMode)
304314 {
305- if (xhToken == i)
315+ XNETHANDLE xhToken = 0 ;
316+ BaseLib_OperatorHandle_Create (&xhToken, 0 , stl_BuckSelect.size (), FALSE );
317+ if (xhToken == stl_BuckSelect.size ())
306318 {
307- *pSt_StorageBucket = *stl_ListIterator;
308- break ;
319+ xhToken--;
320+ }
321+ list<XENGINE_STORAGEBUCKET>::const_iterator stl_ListIterator = stl_BuckSelect.begin ();
322+ for (XNETHANDLE i = 0 ; stl_ListIterator != stl_BuckSelect.end (); stl_ListIterator++, i++)
323+ {
324+ if (xhToken == i)
325+ {
326+ *pSt_StorageBucket = *stl_ListIterator;
327+ break ;
328+ }
309329 }
310330 }
311- }
312- else if ( 2 == nMode)
313- {
314- *pSt_StorageBucket = stl_BuckSelect. front ();
315- }
316- else if ( 3 == nMode)
317- {
318- *pSt_StorageBucket = stl_BuckSelect. back ();
331+ else if ( 2 == nMode)
332+ {
333+ *pSt_StorageBucket = stl_BuckSelect. front ();
334+ }
335+ else if ( 3 == nMode)
336+ {
337+ *pSt_StorageBucket = stl_BuckSelect. back ();
338+ }
319339 }
320340
321341 return TRUE ;
0 commit comments