1- # -*- mode:python; coding:utf-8; -*-
2- # author: Eugene Zamriy <[email protected] > 3- # created: 2017-10-19
4-
51"""
6- CloudLinux Build System build thread implementation.
2+ AlmaLinux Build System build thread implementation.
73"""
84
95import datetime
139import platform
1410import pprint
1511import random
16- import threading
1712import typing
1813import urllib .parse
1914
2015import requests
2116import requests .adapters
17+ from albs_build_lib .builder .base_builder import measure_stage
18+ from albs_build_lib .builder .base_thread_slave_builder import BaseSlaveBuilder
19+ from albs_build_lib .builder .models import Task
20+ from albs_common_lib .errors import BuildError , BuildExcluded
21+ from albs_common_lib .utils .file_utils import (
22+ filter_files ,
23+ rm_sudo ,
24+ )
2225from immudb_wrapper import ImmudbWrapper
2326from requests .packages .urllib3 .util .retry import Retry
2427from sentry_sdk import capture_exception
2528
2629from build_node import constants
27- from build_node .build_node_errors import BuildError , BuildExcluded
28- from build_node .builders .base_builder import measure_stage
2930from build_node .builders .base_rpm_builder import BaseRPMBuilder
30- from build_node .models import Task
3131from build_node .uploaders .pulp import PulpRpmUploader
3232from build_node .utils .codenotary import notarize_build_artifacts
33- from build_node .utils .file_utils import (
34- clean_dir ,
35- filter_files ,
36- rm_sudo ,
37- )
3833
3934
40- class BuildNodeBuilder (threading . Thread ):
35+ class BuildNodeBuilder (BaseSlaveBuilder ):
4136 """Build thread."""
4237
4338 def __init__ (
@@ -62,19 +57,23 @@ def __init__(
6257 graceful_terminated_event : threading.Event
6358 Shows, if process got "kill -10" signal.
6459 """
65- super (BuildNodeBuilder , self ).__init__ (name = f'Builder-{ thread_num } ' )
60+ super ().__init__ (
61+ thread_num = thread_num ,
62+ )
6663 self .__config = config
64+ # current task processing start timestamp
65+ self .__start_ts = None
6766 self .__working_dir = os .path .join (
6867 config .working_dir , 'builder-{0}' .format (thread_num )
6968 )
7069 self .init_working_dir (self .__working_dir )
71- self .__logger = None
72- self .__current_task_id = None
73- # current task processing start timestamp
74- self .__start_ts = None
70+ self .__terminated_event = terminated_event
71+ self .__graceful_terminated_event = graceful_terminated_event
7572 # current task builder object
7673 self .__builder = None
7774 self .__session = None
75+ self .__logger = None
76+ self .__current_task_id = None
7877 self ._immudb_wrapper = None
7978 self ._codenotary_enabled = self .__config .codenotary_enabled
8079 self ._build_stats : typing .Optional [
@@ -87,9 +86,6 @@ def __init__(
8786 self .__config .pulp_chunk_size ,
8887 self .__config .pulp_uploader_max_workers ,
8988 )
90-
91- self .__terminated_event = terminated_event
92- self .__graceful_terminated_event = graceful_terminated_event
9389 self .__hostname = platform .node ()
9490 self .__task_queue = task_queue
9591
@@ -149,8 +145,12 @@ def run(self):
149145 )
150146 capture_exception (e )
151147 finally :
152- only_logs = not bool (
153- filter_files (artifacts_dir , lambda f : f .endswith ('.rpm' ))
148+ only_logs = not (
149+ bool (
150+ filter_files (
151+ artifacts_dir , lambda f : f .endswith ('.rpm' )
152+ )
153+ )
154154 )
155155 if success is False :
156156 only_logs = True
@@ -220,7 +220,9 @@ def run(self):
220220 self .__report_excluded_task (task , build_artifacts )
221221 else :
222222 self .__report_done_task (
223- task , success = success , artifacts = build_artifacts
223+ task ,
224+ success = success ,
225+ artifacts = build_artifacts ,
224226 )
225227 except Exception :
226228 self .__logger .exception (
@@ -258,7 +260,7 @@ def __cas_notarize_artifacts(
258260
259261 def __build_packages (self , task , task_dir , artifacts_dir ):
260262 """
261- Creates a suitable builder instance and builds RPM or Debian packages.
263+ Creates a suitable builder instance and builds RPM packages.
262264
263265 Parameters
264266 ----------
@@ -309,7 +311,12 @@ def __report_excluded_task(self, task, artifacts):
309311 ** kwargs ,
310312 )
311313
312- def __report_done_task (self , task , success = True , artifacts = None ):
314+ def __report_done_task (
315+ self ,
316+ task ,
317+ success = True ,
318+ artifacts = None ,
319+ ):
313320 if not artifacts :
314321 artifacts = []
315322 kwargs = {
@@ -350,15 +357,18 @@ def __call_master(
350357 ** parameters ,
351358 ):
352359 full_url = urllib .parse .urljoin (
353- self .__config .master_url , f'build_node/{ endpoint } '
360+ self .__config .master_url ,
361+ f'build_node/{ endpoint } ' ,
354362 )
355363 if endpoint in ('build_done' , 'get_task' ):
356364 session_method = self .__session .post
357365 else :
358366 session_method = self .__session .get
359367 try :
360368 response = session_method (
361- full_url , json = parameters , timeout = self .__config .request_timeout
369+ full_url ,
370+ json = parameters ,
371+ timeout = self .__config .request_timeout ,
362372 )
363373 # Special case when build was already done
364374 if response .status_code == requests .codes .conflict :
@@ -370,19 +380,6 @@ def __call_master(
370380 except Exception :
371381 self .__logger .exception ('%s' , err_msg )
372382
373- @staticmethod
374- def init_working_dir (working_dir ):
375- """
376- Creates a non-existent working directory or cleans it up from previous
377- builds.
378- """
379- if os .path .exists (working_dir ):
380- logging .debug ('cleaning the %s working directory' , working_dir )
381- clean_dir (working_dir )
382- else :
383- logging .debug ('creating the %s working directory' , working_dir )
384- os .makedirs (working_dir , 0o750 )
385-
386383 def __init_task_logger (self , log_file ):
387384 """
388385 Task logger initialization, configures a build thread logger to write
@@ -423,35 +420,6 @@ def __close_task_logger(self, task_handler):
423420 task_handler .close ()
424421 self .__logger .handlers .remove (task_handler )
425422
426- @staticmethod
427- def init_thread_logger (log_file ):
428- """
429- Build thread logger initialization.
430-
431- Parameters
432- ----------
433- log_file : str
434- Log file path.
435-
436- Returns
437- -------
438- logging.Logger
439- Build thread logger.
440- """
441- logger = logging .getLogger (
442- 'bt-{0}-logger' .format (threading .current_thread ().name )
443- )
444- logger .handlers = []
445- logger .setLevel (logging .DEBUG )
446- formatter = logging .Formatter (
447- "%(asctime)s %(levelname)-8s: %(message)s" , "%H:%M:%S %d.%m.%y"
448- )
449- handler = logging .FileHandler (log_file )
450- handler .setLevel (logging .DEBUG )
451- handler .setFormatter (formatter )
452- logger .addHandler (handler )
453- return logger
454-
455423 @property
456424 def current_task_id (self ):
457425 return self .__current_task_id
0 commit comments