RPM Package Manager, CVS Repository
  http://rpm5.org/cvs/
  ____________________________________________________________________________

  Server: rpm5.org                         Name:   Jeff Johnson
  Root:   /v/rpm/cvs                       Email:  j...@rpm5.org
  Module: rpm                              Date:   01-Oct-2014 17:27:34
  Branch: rpm-5_4                          Handle: 2014100115273102

  Added files:              (Branch: rpm-5_4)
    rpm/rpmio               rpmgfs.c rpmgfs.h
  Modified files:           (Branch: rpm-5_4)
    rpm/rpmio               Makefile.am librpmio.vers poptIO.c rpmio.c

  Log:
    - gfs: stub in a gridfs object with file I/O.

  Summary:
    Revision    Changes     Path
    1.293.2.41  +3  -1      rpm/rpmio/Makefile.am
    2.199.2.48  +7  -0      rpm/rpmio/librpmio.vers
    1.94.2.18   +3  -7      rpm/rpmio/poptIO.c
    1.1.2.1     +190 -0     rpm/rpmio/rpmgfs.c
    1.1.2.1     +113 -0     rpm/rpmio/rpmgfs.h
    1.230.2.27  +4  -10     rpm/rpmio/rpmio.c
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: rpm/rpmio/Makefile.am
  ============================================================================
  $ cvs diff -u -r1.293.2.40 -r1.293.2.41 Makefile.am
  --- rpm/rpmio/Makefile.am     30 Sep 2014 22:31:42 -0000      1.293.2.40
  +++ rpm/rpmio/Makefile.am     1 Oct 2014 15:27:31 -0000       1.293.2.41
  @@ -128,7 +128,8 @@
        radiogatun.h \
        salsa10.h salsa20.h shabal.h shavite3.h simd.h skein.h tib3.h tiger.h \
        pcrs.h poptIO.h rpmacl.h rpmasn.h rpmaug.h rpmbag.h rpmbc.h rpmbz.h \
  -     rpmcdsa.h rpmct.h rpmcudf.h rpmcvs.h rpmdate.h rpmdav.h rpmdir.h 
rpmficl.h rpmgc.h rpmgit.h rpmhash.h \
  +     rpmcdsa.h rpmct.h rpmcudf.h rpmcvs.h rpmdate.h rpmdav.h rpmdir.h \
  +     rpmficl.h rpmgc.h rpmgfs.h rpmgit.h rpmhash.h \
        rpmhkp.h rpmhook.h rpmio_internal.h rpmjni.h rpmjs.h rpmjsio.h \
        rpmkeyring.h \
        rpmku.h rpmltc.h rpmlua.h rpmmg.h rpmmrb.h rpmnix.h rpmnss.h \
  @@ -185,6 +186,7 @@
        rpmdir.c \
        rpmficl.c \
        rpmgc.c \
  +     rpmgfs.c \
        rpmhash.c \
        rpmhkp.c \
        rpmhook.c \
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/librpmio.vers
  ============================================================================
  $ cvs diff -u -r2.199.2.47 -r2.199.2.48 librpmio.vers
  --- rpm/rpmio/librpmio.vers   30 Sep 2014 22:31:43 -0000      2.199.2.47
  +++ rpm/rpmio/librpmio.vers   1 Oct 2014 15:27:31 -0000       2.199.2.48
  @@ -431,6 +431,13 @@
       rpmGenPath;
       rpmGetMacroEntries;
       rpmGetPath;
  +    _rpmgfs_debug;
  +    _rpmgfsI;
  +    rpmgfsClose;
  +    rpmgfsNew;
  +    rpmgfsOpen;
  +    rpmgfsRead;
  +    rpmgfsWrite;
       _rpmgit_debug;
       _rpmgit_dir;
       _rpmgit_tree;
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/poptIO.c
  ============================================================================
  $ cvs diff -u -r1.94.2.17 -r1.94.2.18 poptIO.c
  --- rpm/rpmio/poptIO.c        30 Sep 2014 22:31:43 -0000      1.94.2.17
  +++ rpm/rpmio/poptIO.c        1 Oct 2014 15:27:33 -0000       1.94.2.18
  @@ -28,9 +28,7 @@
   
   #include <rpmasn.h>
   #include <rpmtpm.h>
  -#ifdef       NOTYET
  -#include <mongo.h>
  -#endif
  +#include <rpmgfs.h>
   
   #include <rpmaug.h>
   #include <rpmbag.h>
  @@ -697,10 +695,8 @@
        N_("Debug rpmmg magic"), NULL},
    { "rpmmrbdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, 
&_rpmmrb_debug, -1,
        N_("Debug embedded MRuby interpreter"), NULL},
  -#ifdef NOTYET
  - { "mongodebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmmgo_debug, 
-1,
  -     N_("Debug Mongo DB connection"), NULL},
  -#endif
  + { "rpmgfsdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, 
&_rpmgfs_debug, -1,
  +     N_("Debug Mongo DB gridfs connection"), NULL},
    { "nixdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmnix_debug, 
-1,
        N_("Debug embedded Nix interpreter"), NULL},
    { "odbcdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_odbc_debug, -1,
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmgfs.c
  ============================================================================
  $ cvs diff -u -r0 -r1.1.2.1 rpmgfs.c
  --- /dev/null 2014-10-01 17:22:00.000000000 +0200
  +++ rpmgfs.c  2014-10-01 17:27:34.354348790 +0200
  @@ -0,0 +1,190 @@
  +#include "system.h"
  +
  +#include <rpmiotypes.h>
  +#include <rpmio.h>
  +#include <rpmlog.h>
  +#include <rpmurl.h>
  +
  +#define      _RPMGFS_INTERNAL
  +#include <rpmgfs.h>
  +
  +#include "debug.h"
  +
  +int _rpmgfs_debug;
  +
  +rpmgfs _rpmgfsI;
  +
  +static int gfs_opens;
  +
  +/*==============================================================*/
  +ssize_t rpmgfsRead(rpmgfs gfs, void * buf, size_t count)
  +{
  +    bson_error_t err;
  +    ssize_t rc = 0;
  +
  +    gfs->iov.iov_base = buf;
  +    gfs->iov.iov_len = count;
  +
  +    if (gfs->S == NULL) {
  +     gfs->F = mongoc_gridfs_find_one_by_filename(gfs->G, gfs->fn, &err);
  +assert(gfs->F);
  +
  +     gfs->S = mongoc_stream_gridfs_new(gfs->F);
  +assert(gfs->S);
  +    }
  +
  +    for (;;) {
  +     size_t _iovcnt = 1;
  +     size_t _min_bytes = -1;
  +     int32_t _timeout_msec = 0;
  +
  +     rc = mongoc_stream_readv(gfs->S, &gfs->iov, _iovcnt,
  +                     _min_bytes, _timeout_msec);
  +
  +     if (rc <= 0) {
  +         goto exit;
  +     }
  +
  +     if (fwrite(gfs->iov.iov_base, rc, 1, stdout) != (size_t)rc) {
  +         rc = -1;
  +         goto exit;
  +     }
  +
  +     break;
  +    }
  +
  +exit:
  +    if (rc <= 0) {
  +     if (gfs->S)
  +         mongoc_stream_destroy(gfs->S);
  +     gfs->S = NULL;
  +    }
  +    return rc;
  +}
  +
  +ssize_t rpmgfsWrite(rpmgfs gfs, const void * buf, size_t count)
  +{
  +    bson_error_t err;
  +    ssize_t rc = 0;
  +
  +    gfs->iov.iov_base = (void *) buf;
  +    gfs->iov.iov_len = count;
  +
  +    if (gfs->S == NULL) {
  +     gfs->F = mongoc_gridfs_find_one_by_filename(gfs->G, gfs->fn, &err);
  +assert(gfs->F);
  +
  +     gfs->S = mongoc_stream_gridfs_new(gfs->F);
  +assert(gfs->S);
  +    }
  +
  +    for (;;) {
  +     size_t _iovcnt = 1;
  +     int32_t _timeout_msec = 0;
  +
  +     rc = mongoc_stream_writev(gfs->S, &gfs->iov, _iovcnt, _timeout_msec);
  +assert(rc >= 0);
  +
  +     break;
  +    }
  +
  +    if (rc <= 0) {
  +     if (gfs->S)
  +         mongoc_stream_destroy(gfs->S);
  +     gfs->S = NULL;
  +    }
  +    return rc;
  +}
  +
  +int rpmgfsClose(rpmgfs gfs)
  +{
  +    int rc = 0;
  +
  +    gfs->fn = _free(gfs->fn);
  +    gfs->flags = 0;
  +    gfs->mode = 0;
  +
  +    return rc;
  +}
  +
  +int rpmgfsOpen(rpmgfs gfs, const char * fn, int flags, mode_t mode)
  +{
  +    int rc = 0;
  +
  +    gfs->fn = _free(gfs->fn);
  +    gfs->fn = xstrdup(fn);
  +    gfs->flags = flags;
  +    gfs->mode = mode;
  +
  +    return rc;
  +}
  +
  +/*==============================================================*/
  +
  +static void rpmgfsFini(void * _gfs)
  +     /*@globals fileSystem @*/
  +     /*@modifies *_gfs, fileSystem @*/
  +{
  +    rpmgfs gfs = (rpmgfs) _gfs;
  +
  +    if (gfs->S)
  +     mongoc_stream_destroy(gfs->S);
  +    gfs->S = NULL;
  +
  +    if (gfs->G)
  +     mongoc_gridfs_destroy(gfs->G);
  +    gfs->G = NULL;
  +
  +    if (gfs->C)
  +     mongoc_client_destroy(gfs->C);
  +    gfs->C = NULL;
  +
  +    if (--gfs_opens == 0)
  +     mongoc_cleanup();
  +
  +    gfs->fn = _free(gfs->fn);
  +    gfs->flags = 0;
  +    gfs->mode = 0;
  +}
  +
  +/*@unchecked@*/ /*@only@*/ /*@null@*/
  +rpmioPool _rpmgfsPool = NULL;
  +
  +static rpmgfs rpmgfsGetPool(/*@null@*/ rpmioPool pool)
  +     /*@globals _rpmgfsPool, fileSystem @*/
  +     /*@modifies pool, _rpmgfsPool, fileSystem @*/
  +{
  +    rpmgfs gfs;
  +
  +    if (_rpmgfsPool == NULL) {
  +     _rpmgfsPool = rpmioNewPool("gfs", sizeof(*gfs), -1, _rpmgfs_debug,
  +                     NULL, NULL, rpmgfsFini);
  +     pool = _rpmgfsPool;
  +    }
  +    gfs = (rpmgfs) rpmioGetPool(pool, sizeof(*gfs));
  +    memset(((char *)gfs)+sizeof(gfs->_item), 0, 
sizeof(*gfs)-sizeof(gfs->_item));
  +    return gfs;
  +}
  +
  +rpmgfs rpmgfsNew(const char * fn, int flags)
  +{
  +    static const char * _Curi =              "mongodb://127.0.0.1:27017";
  +    static const char * _Gdb =               "test";
  +    static const char * _Gprefix =   "fs";
  +    rpmgfs gfs = rpmgfsGetPool(_rpmgfsPool);
  +    bson_error_t err;
  +
  +    if (fn)
  +     gfs->fn = xstrdup(fn);
  +
  +    if (gfs_opens++ == 0)
  +     mongoc_init();
  +
  +    gfs->C = mongoc_client_new(_Curi);
  +assert(gfs->C);
  +
  +    gfs->G = mongoc_client_get_gridfs(gfs->C, _Gdb, _Gprefix, &err);
  +assert(gfs->G);
  +
  +    return rpmgfsLink(gfs);
  +}
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmgfs.h
  ============================================================================
  $ cvs diff -u -r0 -r1.1.2.1 rpmgfs.h
  --- /dev/null 2014-10-01 17:22:00.000000000 +0200
  +++ rpmgfs.h  2014-10-01 17:27:34.414353099 +0200
  @@ -0,0 +1,113 @@
  +#ifndef      H_RPMGFS
  +#define      H_RPMGFS
  +
  +/** \ingroup rpmio
  + * \file rpmio/rpmgfs.h
  + */
  +
  +/** \ingroup rpmio
  + */
  +typedef /*@refcounted@*/ struct rpmgfs_s * rpmgfs;
  +
  +/** \ingroup rpmgo
  + */
  +/*@unchecked@*/
  +extern int _rpmgfs_debug;
  +
  +/*@unchecked@*/ /*@relnull@*/
  +extern rpmgfs _rpmgfsI;
  +
  +/*==============================================================*/
  +
  +#if defined(_RPMGFS_INTERNAL)
  +
  +#include <bson.h>
  +#include <mongoc.h>
  +
  +/** \ingroup rpmio
  + */
  +struct rpmgfs_s {
  +    struct rpmioItem_s _item;        /*!< usage mutex and pool identifier. */
  +
  +    const char * fn;
  +    int flags;
  +    mode_t mode;
  +
  +    mongoc_client_t *C;
  +    mongoc_stream_t *S;
  +
  +    mongoc_gridfs_t *G;
  +    mongoc_gridfs_file_t *F;
  +    mongoc_gridfs_file_list_t *D;
  +
  +    mongoc_iovec_t iov;
  +
  +#if defined(__LCLINT__)
  +/*@refs@*/
  +    int nrefs;                       /*!< (unused) keep splint happy */
  +#endif
  +};
  +#endif       /* _RPMGFS_INTERNAL */
  +
  +#ifdef __cplusplus
  +extern "C" {
  +#endif
  +
  +/**
  + * Unreference a mongo wrapper instance.
  + * @param mgo                mongo wrapper
  + * @return           NULL on last dereference
  + */
  +/*@unused@*/ /*@null@*/
  +rpmgfs rpmgfsUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmgfs mgo)
  +     /*@modifies mgo @*/;
  +#define      rpmgfsUnlink(_mgo)      \
  +    ((rpmgfs)rpmioUnlinkPoolItem((rpmioItem)(_mgo), __FUNCTION__, __FILE__, 
__LINE__))
  +
  +/**
  + * Reference a mongo wrapper instance.
  + * @param mgo                mongo wrapper
  + * @return           new mongo wrapper reference
  + */
  +/*@unused@*/ /*@newref@*/ /*@null@*/
  +rpmgfs rpmgfsLink (/*@null@*/ rpmgfs mgo)
  +     /*@modifies mgo @*/;
  +#define      rpmgfsLink(_mgo)        \
  +    ((rpmgfs)rpmioLinkPoolItem((rpmioItem)(_mgo), __FUNCTION__, __FILE__, 
__LINE__))
  +
  +/**
  + * Destroy a mongo wrapper.
  + * @param mgo                mongo wrapper
  + * @return           NULL on last dereference
  + */
  +/*@null@*/
  +rpmgfs rpmgfsFree(/*@killref@*/ /*@null@*/rpmgfs mgo)
  +     /*@globals fileSystem @*/
  +     /*@modifies mgo, fileSystem @*/;
  +#define      rpmgfsFree(_mgo)        \
  +    ((rpmgfs)rpmioFreePoolItem((rpmioItem)(_mgo), __FUNCTION__, __FILE__, 
__LINE__))
  +
  +/**
  + * Create and load a mongo wrapper.
  + * @param fn         mongo file
  + * @param flags              mongo flags
  + * @return           new mongo wrapper
  + */
  +/*@newref@*/ /*@null@*/
  +rpmgfs rpmgfsNew(const char * fn, int flags)
  +     /*@globals fileSystem, internalState @*/
  +     /*@modifies fileSystem, internalState @*/;
  +
  +ssize_t rpmgfsRead(rpmgfs gfs, void * buf, size_t count);
  +
  +ssize_t rpmgfsWrite(rpmgfs gfs, const void * buf, size_t count);
  +
  +int rpmgfsClose(rpmgfs gfs);
  +
  +int rpmgfsOpen(rpmgfs gfs, const char * fn, int flags, mode_t mode);
  +
  +#ifdef __cplusplus
  +}
  +#endif
  +
  +#endif       /* H_RPMGFS */
  @@ .
  patch -p0 <<'@@ .'
  Index: rpm/rpmio/rpmio.c
  ============================================================================
  $ cvs diff -u -r1.230.2.26 -r1.230.2.27 rpmio.c
  --- rpm/rpmio/rpmio.c 30 Sep 2014 22:31:43 -0000      1.230.2.26
  +++ rpm/rpmio/rpmio.c 1 Oct 2014 15:27:33 -0000       1.230.2.27
  @@ -65,9 +65,7 @@
   #include <rpmiotypes.h>
   #include <rpmmacro.h>                /* XXX rpmioAccess needs rpmCleanPath() 
*/
   
  -#ifdef       NOTYET
  -#include <mongo.h>
  -#endif
  +#include <rpmgfs.h>
   
   #include <rpmaug.h>
   #include <rpmct.h>
  @@ -3306,9 +3304,7 @@
       extern rpmioPool _rpmluavPool;
       extern rpmioPool _rpmluaPool;
       extern rpmioPool _rpmmgPool;
  -#ifdef       NOTYET
  -    extern rpmioPool _rpmmgoPool;
  -#endif
  +    extern rpmioPool _rpmgfsPool;
       extern rpmioPool _rpmmrbPool;
   #ifdef       NOTYET
       extern rpmioPool _rpmnixPool;
  @@ -3370,10 +3366,8 @@
   
       _rpmaugI = rpmaugFree(_rpmaugI);
       _rpmaugPool = rpmioFreePool(_rpmaugPool);
  -#ifdef       NOTYET
  -    _rpmmgoI = rpmmgoFree(_rpmmgoI);
  -    _rpmmgoPool = rpmioFreePool(_rpmmgoPool);
  -#endif
  +    _rpmgfsI = rpmgfsFree(_rpmgfsI);
  +    _rpmgfsPool = rpmioFreePool(_rpmgfsPool);
   
       _rpmasnPool = rpmioFreePool(_rpmasnPool);
       _rpmbagPool = rpmioFreePool(_rpmbagPool);
  @@ .
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
CVS Sources Repository                                rpm-cvs@rpm5.org

Reply via email to