mirror of
https://github.com/Unidata/netcdf-c.git
synced 2025-01-06 15:34:44 +08:00
eb3d9eb0c9
Primary changes: * Add an improved cache system to speed up performance. * Fix NCZarr to properly handle scalar variables. Misc. Related Changes: * Added unit tests for extendible hash and for the generic cache. * Add config parameter to set size of the NCZarr cache. * Add initial performance tests but leave them unused. * Add CRC64 support. * Move location of ncdumpchunks utility from /ncgen to /ncdump. * Refactor auth support. Misc. Unrelated Changes: * More cleanup of the S3 support * Add support for S3 authentication in .rc files: HTTP.S3.ACCESSID and HTTP.S3.SECRETKEY. * Remove the hashkey from the struct OBJHDR since it is never used.
49 lines
1.8 KiB
C
49 lines
1.8 KiB
C
/*********************************************************************
|
|
* Copyright 2018, UCAR/Unidata
|
|
* See netcdf/COPYRIGHT file for copying and redistribution conditions.
|
|
*********************************************************************/
|
|
|
|
#ifndef ZCACHE_H
|
|
#define ZCACHE_H
|
|
|
|
/* This holds all the fields
|
|
to support either impl of cache
|
|
*/
|
|
|
|
struct NCxcache;
|
|
|
|
typedef struct NCZCacheEntry {
|
|
struct List {void* next; void* prev; void* unused;} list;
|
|
int modified;
|
|
size64_t indices[NC_MAX_VAR_DIMS];
|
|
char* key;
|
|
size64_t hashkey;
|
|
void* data;
|
|
} NCZCacheEntry;
|
|
|
|
typedef struct NCZChunkCache {
|
|
const NC_VAR_INFO_T* var; /* backlink */
|
|
size64_t ndims; /* true ndims == var->ndims + scalar */
|
|
size64_t chunksize;
|
|
void* fillchunk; /* enough fillvalues to fill a chunk */
|
|
size_t maxentries; /* Max number of entries allowed */
|
|
NClist* mru; /* all cache entries in mru order */
|
|
struct NCxcache* xcache;
|
|
} NCZChunkCache;
|
|
|
|
/**************************************************/
|
|
|
|
extern int NCZ_set_var_chunk_cache(int ncid, int varid, size_t size, size_t nelems, float preemption);
|
|
extern int NCZ_adjust_var_cache(NC_GRP_INFO_T *grp, NC_VAR_INFO_T *var);
|
|
|
|
extern int NCZ_create_chunk_cache(NC_VAR_INFO_T* var, size64_t, NCZChunkCache** cachep);
|
|
extern void NCZ_free_chunk_cache(NCZChunkCache* cache);
|
|
extern int NCZ_read_cache_chunk(NCZChunkCache* cache, const size64_t* indices, void** datap);
|
|
extern int NCZ_flush_chunk_cache(NCZChunkCache* cache);
|
|
extern size64_t NCZ_cache_entrysize(NCZChunkCache* cache);
|
|
extern NCZCacheEntry* NCZ_cache_entry(NCZChunkCache* cache, const size64_t* indices);
|
|
extern size64_t NCZ_cache_size(NCZChunkCache* cache);
|
|
extern int NCZ_buildchunkpath(NCZChunkCache* cache, const size64_t* chunkindices, char** keyp);
|
|
|
|
#endif /*ZCACHE_H*/
|