XRootD
Loading...
Searching...
No Matches
XrdFfsDent.cc File Reference
+ Include dependency graph for XrdFfsDent.cc:

Go to the source code of this file.

Classes

struct  XrdFfsDentcache
 

Macros

#define XrdFfsDent_NDENTCACHES   20
 

Functions

void XrdFfsDent_cache_destroy ()
 
int XrdFfsDent_cache_fill (char *dname, char ***dnarray, int nents)
 
void XrdFfsDent_cache_init ()
 
int XrdFfsDent_cache_search (char *dname, char *dentname)
 
int XrdFfsDent_cstr_cmp (const void *a, const void *b)
 
int XrdFfsDent_dentcache_expired (struct XrdFfsDentcache *cache)
 
void XrdFfsDent_dentcache_fill (struct XrdFfsDentcache *cache, char *dname, char ***dnarray, int nents)
 
void XrdFfsDent_dentcache_free (struct XrdFfsDentcache *cache)
 
int XrdFfsDent_dentcache_invalid (struct XrdFfsDentcache *cache)
 
int XrdFfsDent_dentcache_search (struct XrdFfsDentcache *cache, char *dname, char *dentname)
 
void XrdFfsDent_names_add (struct XrdFfsDentnames **p, char *name)
 
void XrdFfsDent_names_del (struct XrdFfsDentnames **p)
 
int XrdFfsDent_names_extract (struct XrdFfsDentnames **p, char ***dnarray)
 
void XrdFfsDent_names_join (struct XrdFfsDentnames **p, struct XrdFfsDentnames **n)
 

Variables

struct XrdFfsDentcache XrdFfsDentCaches [XrdFfsDent_NDENTCACHES]
 
pthread_mutex_t XrdFfsDentCaches_mutex = PTHREAD_MUTEX_INITIALIZER
 

Class Documentation

◆ XrdFfsDentcache

struct XrdFfsDentcache

Definition at line 132 of file XrdFfsDent.cc.

+ Collaboration diagram for XrdFfsDentcache:
Class Members
char * dirname
char ** dnarray
time_t life
unsigned int nents
time_t t0

Macro Definition Documentation

◆ XrdFfsDent_NDENTCACHES

#define XrdFfsDent_NDENTCACHES   20

Function Documentation

◆ XrdFfsDent_cache_destroy()

void XrdFfsDent_cache_destroy ( )

Definition at line 261 of file XrdFfsDent.cc.

262{
263 int i;
264 for (i = 0; i < XrdFfsDent_NDENTCACHES; i++)
266}
#define XrdFfsDent_NDENTCACHES
struct XrdFfsDentcache XrdFfsDentCaches[XrdFfsDent_NDENTCACHES]
void XrdFfsDent_dentcache_free(struct XrdFfsDentcache *cache)

References XrdFfsDent_dentcache_free(), XrdFfsDent_NDENTCACHES, and XrdFfsDentCaches.

+ Here is the call graph for this function:

◆ XrdFfsDent_cache_fill()

int XrdFfsDent_cache_fill ( char * dname,
char *** dnarray,
int nents )

Definition at line 219 of file XrdFfsDent.cc.

220{
221 int i;
222 pthread_mutex_lock(&XrdFfsDentCaches_mutex);
223 for (i = 0; i < XrdFfsDent_NDENTCACHES; i++)
224 {
225 if (XrdFfsDent_dentcache_search(&XrdFfsDentCaches[i], dname, NULL) != 0)
226 {
228 XrdFfsDent_dentcache_fill(&XrdFfsDentCaches[i], dname, dnarray, nents);
229 pthread_mutex_unlock(&XrdFfsDentCaches_mutex);
230 return 1;
231 }
232 }
233 for (i = 0; i < XrdFfsDent_NDENTCACHES; i++)
234 {
236 {
238 XrdFfsDent_dentcache_fill(&XrdFfsDentCaches[i], dname, dnarray, nents);
239 pthread_mutex_unlock(&XrdFfsDentCaches_mutex);
240 return 1;
241 }
242 }
243 pthread_mutex_unlock(&XrdFfsDentCaches_mutex);
244 return 0;
245}
int XrdFfsDent_dentcache_invalid(struct XrdFfsDentcache *cache)
pthread_mutex_t XrdFfsDentCaches_mutex
int XrdFfsDent_dentcache_search(struct XrdFfsDentcache *cache, char *dname, char *dentname)
int XrdFfsDent_dentcache_expired(struct XrdFfsDentcache *cache)
void XrdFfsDent_dentcache_fill(struct XrdFfsDentcache *cache, char *dname, char ***dnarray, int nents)

References XrdFfsDentcache::dnarray, XrdFfsDentcache::nents, XrdFfsDent_dentcache_expired(), XrdFfsDent_dentcache_fill(), XrdFfsDent_dentcache_free(), XrdFfsDent_dentcache_invalid(), XrdFfsDent_dentcache_search(), XrdFfsDent_NDENTCACHES, XrdFfsDentCaches, and XrdFfsDentCaches_mutex.

+ Here is the call graph for this function:

◆ XrdFfsDent_cache_init()

void XrdFfsDent_cache_init ( )

Definition at line 207 of file XrdFfsDent.cc.

208{
209 int i;
210 for (i = 0; i < XrdFfsDent_NDENTCACHES; i++)
211 {
212 XrdFfsDentCaches[i].t0 = 0;
213 XrdFfsDentCaches[i].nents = 0;
214 XrdFfsDentCaches[i].dirname = strdup("");
215 XrdFfsDentCaches[i].dnarray = NULL;
216 }
217}
unsigned int nents

References XrdFfsDentcache::dirname, XrdFfsDentcache::dnarray, XrdFfsDentcache::nents, XrdFfsDentcache::t0, XrdFfsDent_NDENTCACHES, and XrdFfsDentCaches.

Referenced by XrdFfsMisc_xrd_init().

+ Here is the caller graph for this function:

◆ XrdFfsDent_cache_search()

int XrdFfsDent_cache_search ( char * dname,
char * dentname )

Definition at line 247 of file XrdFfsDent.cc.

248{
249 int i, rval = 0;
250 pthread_mutex_lock(&XrdFfsDentCaches_mutex);
251 for (i = 0; i < XrdFfsDent_NDENTCACHES; i++)
252 if (XrdFfsDent_dentcache_search(&XrdFfsDentCaches[i], dname, dentname) == 1)
253 {
254 rval = 1;
255 break;
256 }
257 pthread_mutex_unlock(&XrdFfsDentCaches_mutex);
258 return rval;
259}

References XrdFfsDent_dentcache_search(), XrdFfsDent_NDENTCACHES, XrdFfsDentCaches, and XrdFfsDentCaches_mutex.

Referenced by XrdFfsPosix_statall().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ XrdFfsDent_cstr_cmp()

int XrdFfsDent_cstr_cmp ( const void * a,
const void * b )

Definition at line 39 of file XrdFfsDent.cc.

40{
41 const char **aa = (const char **)a;
42 const char **bb = (const char **)b;
43 return strcmp(*aa, *bb);
44}

Referenced by XrdFfsDent_dentcache_search(), and XrdFfsDent_names_extract().

+ Here is the caller graph for this function:

◆ XrdFfsDent_dentcache_expired()

int XrdFfsDent_dentcache_expired ( struct XrdFfsDentcache * cache)

Definition at line 169 of file XrdFfsDent.cc.

170{
171 time_t t1;
172 t1 = time(NULL);
173 return (((t1 - cache->t0) < cache->life)? 0 : 1);
174}

References XrdFfsDentcache::life, and XrdFfsDentcache::t0.

Referenced by XrdFfsDent_cache_fill().

+ Here is the caller graph for this function:

◆ XrdFfsDent_dentcache_fill()

void XrdFfsDent_dentcache_fill ( struct XrdFfsDentcache * cache,
char * dname,
char *** dnarray,
int nents )

Definition at line 140 of file XrdFfsDent.cc.

141{
142 int i;
143
144 cache->dirname = strdup(dname);
145 cache->nents = nents;
146 cache->t0 = time(NULL);
147 cache->life = nents / 10 ;
148 cache->dnarray = (char**) malloc(sizeof(char*) * nents);
149
150 for (i = 0; i < nents; i++)
151 cache->dnarray[i] = strdup((*dnarray)[i]);
152}

References XrdFfsDentcache::dirname, XrdFfsDentcache::dnarray, XrdFfsDentcache::life, XrdFfsDentcache::nents, and XrdFfsDentcache::t0.

Referenced by XrdFfsDent_cache_fill().

+ Here is the caller graph for this function:

◆ XrdFfsDent_dentcache_free()

void XrdFfsDent_dentcache_free ( struct XrdFfsDentcache * cache)

Definition at line 154 of file XrdFfsDent.cc.

155{
156 int i;
157 for (i = 0; i < (int)cache->nents; i++)
158 {
159 free(cache->dnarray[i]);
160 }
161 cache->nents = 0;
162 free(cache->dnarray);
163 free(cache->dirname);
164 cache->dnarray = NULL;
165 cache->dirname = NULL;
166}

References XrdFfsDentcache::dirname, XrdFfsDentcache::dnarray, and XrdFfsDentcache::nents.

Referenced by XrdFfsDent_cache_destroy(), and XrdFfsDent_cache_fill().

+ Here is the caller graph for this function:

◆ XrdFfsDent_dentcache_invalid()

int XrdFfsDent_dentcache_invalid ( struct XrdFfsDentcache * cache)

Definition at line 176 of file XrdFfsDent.cc.

177{
178 time_t t1;
179 t1 = time(NULL);
180 return (((t1 - cache->t0) < 28700)? 0 : 1); // after 8 hours (28800 sec), the redirector no longer remembers
181}

References XrdFfsDentcache::t0.

Referenced by XrdFfsDent_cache_fill(), and XrdFfsDent_dentcache_search().

+ Here is the caller graph for this function:

◆ XrdFfsDent_dentcache_search()

int XrdFfsDent_dentcache_search ( struct XrdFfsDentcache * cache,
char * dname,
char * dentname )

Definition at line 183 of file XrdFfsDent.cc.

184{
185 char path[1024];
186
187 strcpy(path, dname);
188 if (dentname != NULL && path[strlen(path) -1] != '/')
189 strcat(path,"/");
190 if (dentname != NULL) strcat(path, dentname);
192 return 0;
193 else if (strlen(cache->dirname) == strlen(path) && strcmp(cache->dirname, path) == 0)
194 return 1;
195 else if (strlen(cache->dirname) != strlen(dname) || strcmp(cache->dirname, dname) != 0)
196 return 0;
197 else if (bsearch(&dentname, cache->dnarray, cache->nents, sizeof(char*), XrdFfsDent_cstr_cmp) != NULL)
198 return 1;
199 else
200 return 0;
201}
int XrdFfsDent_cstr_cmp(const void *a, const void *b)
Definition XrdFfsDent.cc:39

References XrdFfsDentcache::dirname, XrdFfsDentcache::dnarray, XrdFfsDentcache::nents, XrdFfsDent_cstr_cmp(), and XrdFfsDent_dentcache_invalid().

Referenced by XrdFfsDent_cache_fill(), and XrdFfsDent_cache_search().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ XrdFfsDent_names_add()

void XrdFfsDent_names_add ( struct XrdFfsDentnames ** p,
char * name )

Definition at line 56 of file XrdFfsDent.cc.

57{
58 struct XrdFfsDentnames *n = (struct XrdFfsDentnames*)malloc(sizeof(struct XrdFfsDentnames));
59 n->name = strdup(name);
60
61 n->next = *p;
62 *p = n;
63 return;
64}
struct XrdFfsDentnames * next
Definition XrdFfsDent.hh:41

References XrdFfsDentnames::name, and XrdFfsDentnames::next.

Referenced by XrdFfsPosix_x_readdirall().

+ Here is the caller graph for this function:

◆ XrdFfsDent_names_del()

void XrdFfsDent_names_del ( struct XrdFfsDentnames ** p)

Definition at line 49 of file XrdFfsDent.cc.

50{
51 (*p)->name = NULL;
52 (*p)->next = NULL;
53 free(*p);
54}

Referenced by XrdFfsDent_names_extract().

+ Here is the caller graph for this function:

◆ XrdFfsDent_names_extract()

int XrdFfsDent_names_extract ( struct XrdFfsDentnames ** p,
char *** dnarray )

Definition at line 100 of file XrdFfsDent.cc.

101{
102 struct XrdFfsDentnames *x, *y;
103 int i = 0;
104
105 y = *p;
106 while (y != NULL)
107 {
108 i++;
109 y = y->next;
110 }
111 /* be careful, old dnarray is lost */
112 *dnarray = (char**) malloc(sizeof(char*) * i);
113
114 x = *p;
115 y = *p;
116 i = 0;
117 while (y != NULL)
118 {
119 (*dnarray)[i++] = y->name;
120 y = y->next;
122 x = y;
123 }
124
125 qsort((*dnarray), i, sizeof(char*), XrdFfsDent_cstr_cmp);
126 *p = NULL;
127 return i;
128}
void XrdFfsDent_names_del(struct XrdFfsDentnames **p)
Definition XrdFfsDent.cc:49

References XrdFfsDentnames::name, XrdFfsDentnames::next, XrdFfsDent_cstr_cmp(), and XrdFfsDent_names_del().

+ Here is the call graph for this function:

◆ XrdFfsDent_names_join()

void XrdFfsDent_names_join ( struct XrdFfsDentnames ** p,
struct XrdFfsDentnames ** n )

Definition at line 78 of file XrdFfsDent.cc.

79{
80 struct XrdFfsDentnames *t, *l = 0;
81
82 if ( *p != NULL )
83 {
84 t = *p;
85 while ( t != NULL )
86 {
87 l = t;
88 t = t->next;
89 }
90 l->next = *n;
91 }
92 else
93 *p = *n;
94}

References XrdFfsDentnames::next.

Variable Documentation

◆ XrdFfsDentCaches

◆ XrdFfsDentCaches_mutex

pthread_mutex_t XrdFfsDentCaches_mutex = PTHREAD_MUTEX_INITIALIZER

Definition at line 205 of file XrdFfsDent.cc.

Referenced by XrdFfsDent_cache_fill(), and XrdFfsDent_cache_search().