createrepo_c library  1.0.3
C library for metadata manipulation
dumper_thread.h
1 /* createrepo_c - Library of routines for manipulation with repodata
2  * Copyright (C) 2014 Tomas Mlcoch
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
17  * USA.
18  */
19 
20 #ifndef __C_CREATEREPOLIB_DUMPER_THREAD_H__
21 #define __C_CREATEREPOLIB_DUMPER_THREAD_H__
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 #include <glib.h>
28 #include <rpm/rpmlib.h>
29 #include "load_metadata.h"
30 #include "locate_metadata.h"
31 #include "misc.h"
32 #include "package.h"
33 #include "sqlite.h"
34 #include "xml_file.h"
35 
41 struct PoolTask {
42  long id; // ID of the task
43  long media_id; // ID of media in split mode, 0 if not in split mode
44  char* full_path; // Complete path - /foo/bar/packages/foo.rpm
45  char* filename; // Just filename - foo.rpm
46  char* path; // Just path - /foo/bar/packages
47 };
48 
50  gchar *location;
51  cr_Package *pkg;
52 };
53 
54 struct UserData {
55  cr_XmlFile *pri_f; // Opened compressed primary.xml.*
56  cr_XmlFile *fil_f; // Opened compressed filelists.xml.*
57  cr_XmlFile *fex_f; // Opened compressed filelists-ext.xml.*
58  cr_XmlFile *oth_f; // Opened compressed other.xml.*
59  cr_SqliteDb *pri_db; // Primary db
60  cr_SqliteDb *fil_db; // Filelists db
61  cr_SqliteDb *fex_db; // Filelists-ext db
62  cr_SqliteDb *oth_db; // Other db
63  cr_XmlFile *pri_zck; // Opened compressed primary.xml.zck
64  cr_XmlFile *fil_zck; // Opened compressed filelists.xml.zck
65  cr_XmlFile *fex_zck; // Opened compressed filelists-ext.xml.zck
66  cr_XmlFile *oth_zck; // Opened compressed other.xml.zck
67  char *prev_srpm; // Previous srpm
68  char *cur_srpm; // Current srpm
69  int changelog_limit; // Max number of changelogs for a package
70  const char *location_base; // Base location url
71  int repodir_name_len; // Len of path to repo /foo/bar/repodata
72  // This part |<----->|
73  const char *checksum_type_str; // Name of selected checksum
74  cr_ChecksumType checksum_type; // Constant representing selected checksum
75  const char *checksum_cachedir; // Dir with cached checksums
76  GHashTable *checksum_hash; // Hash with checksums read from file
77  gboolean skip_symlinks; // Skip symlinks
78  gboolean filelists_ext; // Include hashes (and create filelists-ext.*)
79  long task_count; // Total number of tasks to process
80  long package_count; // Total number of packages processed
81  long skipped_count; // Total number of explicitly skipped packages
82 
83  // Duplicate package error checking
84  GMutex mutex_nevra_table; // Mutex for the table of NEVRAs
85  GHashTable *nevra_table; // Table of NEVRAs mapped to packages and their locations
86 
87  // Update stuff
88  gboolean skip_stat; // Skip stat() while updating
89  cr_Metadata *old_metadata; // Loaded metadata
90  GMutex mutex_old_md; // Mutex for accessing old metadata
91 
92  // Thread serialization
93  GMutex mutex_pri; // Mutex for primary metadata
94  GMutex mutex_fil; // Mutex for filelists metadata
95  GMutex mutex_fex; // Mutex for filelists-ext metadata
96  GMutex mutex_oth; // Mutex for other metadata
97  GCond cond_pri; // Condition for primary metadata
98  GCond cond_fil; // Condition for filelists metadata
99  GCond cond_fex; // Condition for filelists-ext metadata
100  GCond cond_oth; // Condition for other metadata
101  volatile long id_pri; // ID of task on turn (write primary metadata)
102  volatile long id_fil; // ID of task on turn (write filelists metadata)
103  volatile long id_fex; // ID of task on turn (write filelists-ext metadata)
104  volatile long id_oth; // ID of task on turn (write other metadata)
105 
106  // Buffering
107  GQueue *buffer; // Buffer for done tasks
108  GMutex mutex_buffer; // Mutex for accessing the buffer
109 
110  // Delta generation
111  gboolean deltas; // Are deltas enabled?
112  gint64 max_delta_rpm_size; // Max size of an rpm that to run
113  // deltarpm against
114  GMutex mutex_deltatargetpackages; // Mutex
115  GSList *deltatargetpackages; // List of cr_DeltaTargetPackages
116 
117  // Location href modifiers
118  gint cut_dirs; // Ignore *num* of directory components
119  // in location href path
120  gchar *location_prefix; // Append this prefix into location_href
121  // during repodata generation
122  gboolean had_errors; // Any errors encountered?
123 
124  FILE *output_pkg_list; // File where a list of read packages is written
125  GMutex mutex_output_pkg_list; // Mutex for output_pkg_list file
126  GArray *delayed_write; // Dump these files once all packages are loaded
127 };
128 
129 
130 void
131 cr_dumper_thread(gpointer data, gpointer user_data);
132 
133 
134 void
135 cr_delayed_dump_set(gpointer user_data);
136 
137 void
138 cr_delayed_dump_run(gpointer user_data);
139 
142 #ifdef __cplusplus
143 }
144 #endif
145 
146 #endif /* __C_CREATEREPOLIB_DUMPER_THREAD_H__ */
cr_ChecksumType
Definition: checksum.h:43
struct _cr_Metadata cr_Metadata
Definition: load_metadata.h:86